给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

给定数组 nums = [1,1,2], 

函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 

你不需要考虑数组中超出新长度后面的元素。
================================
关于此类的题目,提取有效信息,有序数组,应该想到利用双指针来进行处理;
我们需要跳过重复的元素,然后遇到非重复元素进行覆盖操作
解法1.
 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进行存储

这个实现有点慢,好歹也是自己第一次的解题思路,多一种思路未尝不可

 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     }

 

 

 

 

 





版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/2569.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号