領釦LintCode演算法問題答案-1886. 目標移動

二當家的白帽子發表於2020-10-13

領釦LintCode演算法問題答案-1886. 目標移動

1886. 目標移動

描述

給定一個陣列 nums 以及一個整數 target 。
你需要把陣列中等於target的元素移動到陣列的最前面,並且其餘的元素相對順序不變。
你的所有移動操作都應該在原陣列上面操作。

  • 陣列的長度範圍是: [1, 100000]
  • 如果陣列中沒有出現 target 則不需要對原陣列進行修改。

樣例 1:

輸入:
nums = [5, 1, 6, 1]
target=1
輸出: [1, 1, 5, 6]
解釋: 1 是目標值,應該讓所有的1在陣列的最前面

樣例 2:

輸入:
nums = [-1, 2, 3, 5, 2, 2]
target = 2
輸出: [2, 2, 2, -1, 3, 5]
解釋: 2 是目標值,應該讓所有的 2 都在陣列的最前面 

樣例 3:

輸入:
nums = [2, 3, 4, 6]
target = 1
輸出: [2, 3, 4, 6]
解釋: 陣列中沒有目標值,不需要改變原陣列

題解

public class Solution {
    /**
     * @param nums: a list of integer
     * @param target: an integer
     * @return: nothing
     */
    public void MoveTarget(int[] nums, int target) {
        // write your code here
        int count = 0;
        for (int i = nums.length - 1; i >= 0; i--) {
            if (nums[i] == target) {
                count++;
            } else {
                if (count > 0) {
                    nums[i + count] = nums[i];
                }
            }
        }

        for (int i = 0; i < count; i++) {
            nums[i] = target;
        }
    }
}

原題連結點這裡

鳴謝

非常感謝你願意花時間閱讀本文章,本人水平有限,如果有什麼說的不對的地方,請指正。
歡迎各位留言討論,希望小夥伴們都能每天進步一點點。

相關文章