LintCode 521.去除重复元素

LintCode 521.去除重复元素

描述

给一个整数数组,去除重复的元素。

你应该做这些事

1.在原数组上操作
2.将去除重复之后的元素放在数组的开头
3.返回去除重复元素之后的元素个数

挑战

1.O(n)时间复杂度.
2.O(nlogn)时间复杂度但没有额外空间

答案

  • 使用Map存储。时间复杂度O(n),空间复杂度O(n)

    public int deduplication(int[] nums) {
        // write your code here
        HashMap<Integer, Integer> map = new HashMap<>();
        int i = 0, j = nums.length - 1;
        while (i <= j) {
            if (map.get(nums[i]) == null) {
                map.put(nums[i], 1);
            } else {
                map.put(nums[i], map.get(nums[i]) + 1);
            }
            if (map.get(nums[i]) > 1) {
                int t = nums[i];
                nums[i] = nums[j];
                nums[j] = t;
                j--;
            } else {
                i++;
            }
        }
        return map.size();
    }
    
  • 排序后用双指针

    public int deduplication(int[] nums) {
        Arrays.sort(nums);
    
        int i = 0, j = 1;
        while (j < nums.length) {
            if(nums[j] != nums[i]) {
                int t = nums[i];
                nums[i] = nums[j];
                nums[j] = t;
            }
            j++;
        }
        return i+1;
    }
    
原文地址:https://www.cnblogs.com/wuxie0ne/p/10709982.html