问题描述

给定一个有序数组,要删除数组重复出现的元素,使得每个元素之出现一次,然后返回移除重复数组后的新长度;

示例:

给定数组 nums = [1,2,4,4],删除重复出现的元素后,原数组变成 nums = [1, 2, 4],新的数组长度为 3;

解决思路

In-place array operation

数组原地操作,时间复杂度为 ;

 /*** 去除有序数组中重复元素并返回数组的新长度* @param nums* @return 删除重复元素后数组的新长度*/public int removeDuplicates(int[] nums) {// 数组初始容量int length = nums.length;// 我们假定数组最后一个元素是唯一的,然后对于其他的每个元素,如果自身与它后边的数相同,那么就删除这个相同的元素for(int i = length - 2; i >= 0; i++){// 比较当前元素与其后一个元素是否相等if(nums[i] == nums[i + 1]){// 若相等,则移除后一位,并将所有元素向前移动一位for(int j = i + 1; j < length; j++){num[j - 1] = nums[j];}length--;}}// 返回数组的新长度return length;}

普通方法

针对数组原地,操作算法时间复杂度为 ,为降低时间复杂度提高算法效率,可以通过空间换时间的做法,通过定义新的数组,从而实现去除重复元素的目的,此时的时间复杂度为 ;

 /*** 去除有序数组中重复元素并返回数组的新长度* @param nums* @return 删除重复元素后的新数组*/public int[] removeDuplicates(int[] nums) {// 临界情况if(nums.length == 0){return nums;}// 先求出数组中无重复时的元素个数int size = 0;for(int i = 0; i < nums.length; i++){if(i == 0 || nums[i] != nums[i - 1]){size++;}}// 用于存放不含重复元素的有序数组int[] resultArr = new int[size];int index = 0;for(int i = 0; i < nums.length; i++){if(i == 0 || nums[i] != nums[i + 1]){resultArr[index++] = nums[i];}}// 返回新的不含重复元素的有序数组return resultArr;    }

双指针

 /*** 去除有序数组中重复元素并返回数组的新长度* @param nums* @return 删除重复元素后数组的新长度*/public int removeDuplicates(int[] nums) {// 临界情况if(nums.length == 0){reutrn 0;}int size = 0;for(int i = 1; i < nums.length; i++){if(nums[size] != nums[i]){nums[++size] = nums[i];​}}    // 返回新长度return size + 1;}

文章会优先发布在 公众号知乎,欢迎关注;
公众号:村雨遥
知乎:https://www.zhihu.com/people/cunyu1943
个人博客:https://cunyu1943.github.io
Github:https://github.com/cunyu1943
CSDN:https://blog.csdn.net/github_39655029
简书:https://www.jianshu.com/u/9fd25635ae22
Gitbook:https://cunyu1943.gitbook.io
腾讯云社区:https://cloud.tencent.com/developer/user/6209990

求栈中元素个数算法_Algorithm 大家都会的去除有序数组中重复元素的三种算法...相关推荐

  1. 【数据结构与算法】之深入解析“删除有序数组中的重复项”与“移除元素”的求解思路与算法示例

    删除有序数组中的重复项 一.题目要求 给你一个升序排列的数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度.元素的相对顺序应该保持 一致 . 由于在某些语言中不 ...

  2. 去除有序数组/链表的重复元素--双指针原地修改

    去除有序数组的重复元素–双指针原地修改 文章目录 去除有序数组的重复元素--双指针原地修改 一.题目描述 二.分析 三.代码:数组 四.代码:链表 一.题目描述 二.分析 显然,由于数组已经排序,所以 ...

  3. php数组如何写入txt文件中_php将数组写入到文件的三种方法

    php的数组十分强大,有些数据不存入数据库直接写到文件上,用的时候直接从文件中读取,本文章向大家介绍php将数组写入到文件的三种方法. 第一:serialize方法 使用 serialize 将数组序 ...

  4. 三种算法求两个正整数的最大公约数和最小公倍数;求三个数的最大公约数和最小公倍数

    第二次作业 题目:求两个正整数的最大公约数和最小公倍数. 基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出. 提高要求:1.三种以上算法解决两个正整 ...

  5. C语言编程>第七周 ⑧ 请编一个函数void fun(int a[M][N],int b[N]),c指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入b所指一维数组中。

    例题:请编一个函数void fun(int a[M][N],int b[N]),c指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入b所指一维数组中.二维数组中的数己在主函数中赋予. ...

  6. 求一个数的二进制中有多少了 1 的三种算法 ——Java篇

    求一个数的二进制中有多少了 1 的三种算法 --Java篇 文章目录 求一个数的二进制中有多少了 1 的三种算法 --Java篇 算法一:通过取模 % 运算就取出每一比特位数值,再判断 思路: 代码: ...

  7. 关于随机输出数组中所有元素的三种算法

    算法一:比较常见,也比较容易想到.缺点:如果arrA中有重复元素,那么重复的元素只会输出一次. int[] arrA={1,2,3,4,5,6}; int[] arrB=new int[arrA.le ...

  8. 13.请编一个函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。

    13.请编一个函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中.二维数组中的数已在主函数中 ...

  9. 请编写一个函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。

    #include <iostream> #include<iomanip> using namespace std; #define M 3 #define N 4 /*求出二 ...

最新文章

  1. 【行业看点】量子通信 量子计算机 量子列车…… 量子的世界究竟多精彩?
  2. GDCM:gdcm::Object的测试程序
  3. Spring Batch可重启性
  4. 一个系统中同时使用VC6.0+OpenCV1.0和VS2010+OpenCV2.4.6.0的方法
  5. Ubuntu 或 UbuntuKyKin14.04 Unity桌面风格与Gnome桌面风格的切换
  6. 【LeetCode】剑指 Offer 14. 剪绳子
  7. 疑似一加7 Pro 5G版通过3C认证:配备30W快充头
  8. PHP 数组排序函数sort,rsort,ksort,krsort,asort,arsort区别
  9. 吊打 IE、Firefox,谷歌 Chrome 十年封神记
  10. 小辣椒android密码怎样开,小辣椒手机忘记密码怎么恢复出厂设置
  11. H桥驱动芯片IR2110功能简介
  12. 【转】程序员这口饭-职业规划解决方案
  13. Struts 2的基石——拦截器(Interceptor)详细讲解
  14. SpringBoot企业微信点餐系统
  15. AI VS 好莱坞?新时代电影工作流;MJ制作微信表情包的麻瓜教程;关于ControlNet的一切;AI创业真钱景 | ShowMeAI日报
  16. 2021年记录杭州买房大事
  17. aicloud服务器不稳定,华硕AC级无线路由器搭载AiCloud上市
  18. 宝塔面板网站一打开cpu百分百_解决宝塔面板CPU占满100%,负载100%网站缓慢等问题(完全篇)...
  19. python脚本文件的扩展命是什么_一些文件的扩展名
  20. 进入DFU模式恢复教程 iOS9强制降级iOS8教程

热门文章

  1. MySQL中会用到age字段的索引_MySQL学习笔记(四):正确使用索引(二)
  2. plsql查询不显示结果_管理NVivo的查询结果
  3. 《python自动化》学习笔记:电话地址和E-mail地址提取程序
  4. 爆炸的符卡洋洋洒洒(01背包)
  5. 小爱同学100个奇葩回复_奇葩”订单分享:谁还不是个有故事的同学了?
  6. c语言中注释参与程序设计的编译吗,C语言程序设计(第4章函数)6
  7. mysql 端口 php_php - 如何修改mysql端口并对外开放。。
  8. Shell脚本编程之(二)简单的Shell脚本练习
  9. 机器学习中应用到的各种距离介绍(附上Matlab代码)
  10. VSCode前端文件(html文件)如何以服务器模式打开?