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

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

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

posted @ 2022-09-27 14:55  xiaoyu_jane  阅读(28)  评论(0编辑  收藏  举报