LeetCode-27~Remove Element

Given an array and a value, remove all instances of that value in place and return the new length. Do not allocate extra space for another array, you must do this in place with constant memory. The order of elements can be changed. It doesn't matter what you leave beyond the new length.
Example:Given input array nums = [3,2,2,3] , val = 3
Your function should return length = 2, with the first two elements of nums being 2.
給定一個array和一個值,將數組中相同的值去掉,返回新的數組的長度。

算法分析

方法一:

算法跟LeetCode-26思路一樣。具體參見Remove Duplicates from Sorted Array

代碼
public class Solution {
    public int removeElement(int[] nums, int val) {
        int n = nums.length;
        if (n == 0) return 0;
        
        int index = 0;
        for (int i = 0; i < n; i++) {
            if (nums[i] != val) {
                nums[index] = nums[i];
                index ++;
            }
        }
        return index;
    }
}
方法二

現在考慮如下情況:nums=[1,2,3,5,4],val=4,方法一會復制前面四個值,很沒有必要。因此可以考慮把這些沒有必要的步驟去掉。如下情況:nums = [4,1,2,3,5], val = 4nums[i] == val時,將左后一個值與當前值交換。

代碼
public class Solution {
    public int removeElement(int[] nums, int val) {
        int n = nums.length;
        int i = 0;
        while (i < n) {
            if (nums[i] == val) {
                nums[i] = nums[n - 1];
                n --;
            } else {
                i ++;
            }
        }
        return i;
    }
}

參考

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容