给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 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)


相关推荐

  • setPositiveButton和setNegativeButton

    setPositiveButton和setNegativeButtonhttp://bbs.csdn.net/topics/380241826看看下面的回答

  • linux上查看jdk环境变量,linux 怎么查看jdk的环境变量

    linux上查看jdk环境变量,linux 怎么查看jdk的环境变量1.查看系统中是否有JDK及其版本:java-version2.查看具体的信息:rpm-qa|grepgcj3.根据Java具体信息卸载JDK:rpm-e–nodepsjava-1.5.0-gcj-1.5.0.0-29.1.el6.x86_644.把下载的JDK包(rpm)上传到Linux系统中,进入对应的目录下执行:rpm-ivhjdk-7u79-linux-x64.rpm…

  • eclipse中文乱码解决

    eclipse中文乱码解决1.修改项目的编码格式,或者工作空间的编码格式无法作用到项目里面的java文件的编码格式。2.项目中修改编码格式只有选中Inheritedfromcontainer,该项目的编码格式才会随着工作空间编码格式的改变而改变。3.只要改动了所有文件的编码格式,那么单个java文件的编码格式也会跟着修改。4.别人eclipse的所有java文件的编码格式设置为UTF-8,他用这个编码格式打…

  • Android KitKat 4.4 Wifi移植AP模式和网络共享的调试日志

    Android KitKat 4.4 Wifi移植AP模式和网络共享的调试日志

  • 基于UDP编程_udp详解

    基于UDP编程_udp详解基于UDP编程1UDP是数据报协议,无连接的,不可靠,追求传输效率的一种通信协议数据的发送和接收是同步的.在进行通信之前,不需要建立连接.其传输效率比TCP高.对其服务器而言,并没有三次握手的过程.因此和TCP相比,少了被动监听(listen)和(accept).只需要创建通信设备,绑定IP地址和端口号.然后进行数据的收发.1.服务器端的编程模型创建一个socket端点,返回该端点的文件描述符fdsocket(2)2)将fd和本地地址绑定bind(2)while(1){3)阻塞等待

  • 视觉SLAM技术_解读团体技术

    视觉SLAM技术_解读团体技术近年来,SLAM技术取得了惊人的发展,领先一步的激光SLAM已成熟的应用于各大场景中,视觉SLAM虽在落地应用上不及激光SLAM,但也是目前研究的一大热点,今天我们就来详细聊聊视觉SLAM的那些事儿。视觉SLAM是什么?视觉SLAM主要是基于相机来完成环境的感知工作,相对而言,相机成本较低,容易放到商品硬件上,且图像信息丰富,因此视觉SLAM也备受关注。目前,视觉SLAM可…

发表回复

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

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