代码语言:javascript复制
给定数组 nums = [1,1,2],
函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。
你不需要考虑数组中超出新长度后面的元素。
================================
关于此类的题目,提取有效信息,有序数组,应该想到利用双指针来进行处理;
我们需要跳过重复的元素,然后遇到非重复元素进行覆盖操作
解法1.
代码语言:javascript复制 1 public static int removeRepeat(int[] array){
2 int len = array.length;
3 int temp = 0;
4
5 if (len == 0 ){
6 return 0;
7 }else {
8 for (int i = 0; i < len; i ) {
9 if (array[temp] != array[i]){
10 array[ temp] = array[i];
11 }
12
13 }
14
15 return temp 1;
16
17 }
18
19
20
21 }
2.去重,可以利用map进行操作,以 array[i] — i, 进行存储,这样可以起到去重的效果,然后我们遍历一遍数据,进行替换覆盖就可以了;
注意,hashmap是非顺序存储的,我们需要保证数组的有序排列,所以需要用到有存储顺序的linkedhashmap进行存储
这个实现有点慢,好歹也是自己第一次的解题思路,多一种思路未尝不可
代码语言:javascript复制 1 public static int removeDuplicates(int[] nums) {
2 LinkedHashMap<Integer, Integer> hashMap = new LinkedHashMap<>();
3 for (int i = 0; i < nums.length; i ) {
4 hashMap.put(nums[i],i);
5 }
6 int index = 0;
7 for (Map.Entry<Integer, Integer> entry:hashMap.entrySet()) {
8 Integer key = entry.getKey();
9 nums[index] = key;
10 index ;
11 }
12 return index;
13 }