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; }