首页 > 其他分享 >【code基础】顺序数组的去重

【code基础】顺序数组的去重

时间:2022-09-27 15:00:50浏览次数:68  
标签:code nums int System Arrays 顺序 数组 println

掌握顺序数组的去重,对后续算法的去重剪枝,降低时间复杂度很有用,其基本思路如下:

1.双指针,k和i。其中k指向不重复的位置,i为数组的遍历指针
2.对数组进行遍历,其中i可以从1开始,k从0开始
3.比较nums[k]和nums[i]:

  • 如果两者相同,移动i,k不变
  • 如果两者不同,移动k,nums[k]=nums[i],这里需要理解,k所指的是纯粹的不重复的位置,我们只需要对k位置赋值就可,置于nums[i]位置,因为有重复,所以我们无须关注
     @Test
    //顺序数组的去重
  public void sortDistinct(){
      int[] nums = {0,0,1,1,1,2,2,3,3,4};
      int k = 0;
      for (int i = 0; i < nums.length; i++) { 
          if (nums[k]!=nums[i]){              
              k+=1;                           
              nums[k]=nums[i] ;               
          }                                   
      }
      System.out.println(Arrays.toString(nums)); //[0, 1, 2, 3, 4, 2, 2, 3, 3, 4]
      System.out.println(k); //4
      int[] res = Arrays.copyOf(nums,k+1); //新数组长度为k+1
      System.out.println(Arrays.toString(res)); //[0, 1, 2, 3, 4]

  }

//k=0,i=1  k=0,i=2    k=1,i=3   k=1,i=4  k=1,i=5      k=2,i=6   k=2,i=7       k=3,i=8    k=3,i=9
//0,0      0,1        1,1       1,1      1,2          2,2       2,3           3,3        3,4
//         k=1                           k=2                    k=3                      k=4
//         nums[1]=1                     nums[2]=2              nums[3]=3                nums[4]=4
//0,0,..   0,1,...                       0,1,2                  0,1,2,3                  0,1,2,3,4

标签:code,nums,int,System,Arrays,顺序,数组,println
From: https://www.cnblogs.com/xiaoyu-jane/p/16734575.html

相关文章

  • 直播电商平台开发,顺序循环图片切换
    直播电商平台开发,顺序循环图片切换1.body <divclass="box">    <divclass="btnbox">    <buttonclass="active">顺序播放</button>    <bu......
  • Code First、DBFirst、Model First
    CodeFirst、DBFirst、ModelFirstCodeFirst领域设计时先定义实体类,用实体类生成数据库DbFirst从数据库生成实体类ModelFirst使用VisualStudio实体设计器,设计ER,同......
  • mybatisPlus逆向生成工具类CodeGenerator (生成pojo、controller、service等)
    importcom.baomidou.mybatisplus.annotation.IdType;importcom.baomidou.mybatisplus.generator.AutoGenerator;importcom.baomidou.mybatisplus.generator.config.Da......
  • AtCoder ABC 270 题解(D-F)
    AtCoderABC270题解(D-F)D-Stones(博弈DP)题目:​ 现在有一堆石子,一个序列a表示每次可以从石头里拿走多少个石子。当无法再拿出石头的时候,游戏结束。两边都以最佳策略......
  • leetcode 617. Merge Two Binary Trees 合并二叉树(简单)
    一、题目大意给你两棵二叉树:root1和root2。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉......
  • AtCoder Beginner Contest 256
    AtCoder五十连练第二练AtCoderBeginnerContest256D-UnionofInterval给定\(N\)个左闭右开的区间,求这些区间的并集。数据范围:\(1\leN\le2\times10^5\)......
  • AtCoder Beginner Contest 270 G,Ex
    y1s1,G和Ex在推等比数列式子上是相似的。G前置知识:BSGS(其实就是根号讨论)首先我们展开这个递归式:\[X_{i}\equivA^{i}S+\sum_{j=0}^{i-1}A^jB\modP\]感觉第一项有......
  • 数组中的第K个最大元素
    题目描述:给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。思路:首先......
  • vscode运行vue项目(vscode插件安装)
    vetureslinAutoCloseTagAutoRenameTagDebuggerforChromeopeninbrowserJavaScript(ES6)codesnippetsPathIntellisenseBracketPairColorizerBetterC......
  • js 数组之 splice
    //将一个数组进行截取,返回的是数组被截取的部分//余下的放在留在原来的数组里面(1)[].splice(arg1,arg2);第一个表示的是开始的下标,第二个表示的是结束下标,第二个参数可......