天天看點

【資料結構與算法】leetcode刷題記錄(删除數組元素重複項+移除元素) ---->線性表和連結清單删除排序數組中的重複項移除元素

文章目錄

  • 删除排序數組中的重複項
    • java解決
    • python
    • 也可以一行搞定
  • 移除元素
    • java解決方案
    • python解決方案

删除排序數組中的重複項

java解決

1.排序後比較

對數組進行排序,然後周遊數組,

如果 i +1 = i 的value 就把這個數彈出.

因為排序了,是以 遇到不相等的數以後1,說明後面不會出現相等的數,是以傳回.

class Solution {
    public static int removeDuplicates(int[] nums) {
        if(nums.length==0){return 0;}
        if(nums.length==1){return 1;}
        int size = nums.length;
        Arrays.sort(nums);
        for(int i = 0;i<size-1;i++){
            if(nums[i]==nums[i+1]&&i+1!=size) {
                for (int j = i + 1; j < size; j++) {
                    nums[j - 1] = nums[j];
                }
                size--;
                i--;
            }
        }
        return size;
    }
}
           

2.雙指針周遊,

制作内外兩個指針,依次比較,每遇到相同的數

就把這個數之後所有數, 往前移一個, 長度指針減1

class Solution {
    public static int removeDuplicates(int[] nums) {
        if(nums.length==0){return 0;}
        if(nums.length==1){return 1;}
        int size = nums.length;
        for(int i = 0;i<size-1;i++){
            for(int j = size-1;j>i;j--){
                if(nums[i]==nums[j]){
                    size--;
                }
            }
        }
        System.out.println(Arrays.toString(nums));
        return size;
}
           

python

1.排序,循環比較,因為python有list而沒有數組,是以這個題可以直接pop

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        a = 0
        b = 1
        nums.sort()
        while b < len(nums):
            if nums[a] == nums[b]:
                nums.pop(a)
            else:
                a += 1
                b += 1
        return len(nums)
           

2.set集合

集合自身有去重

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        nums[:] = list(sorted(set(nums)))
        return len(nums)
           

也可以一行搞定

移除元素

java解決方案

1.周遊

當遇到要找的元素時,把後面的所有元素向前移動一個位置

class Solution {
    public int removeElement(int[] nums, int val) {
        if (nums.length==0){
            return 0;
        }
        int size = nums.length;
        for(int i = 0;i<size;i++){
            if(val==nums[i]){
                int p = i+1;
                for(int j = p;j<size;j++){
                    nums[j-1]=nums[j];
                }
                size--;
                i--;
            }
        }
        return size;
    }
}
           

python解決方案

直接找,找到了彈出去

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        i = 0
        while i<len(nums):
            if nums[i] == val:
                nums.pop(i)
            else:
                i+=1
        return len(nums)