其他分享
首页 > 其他分享> > 数组去重(返回去重后的长度)

数组去重(返回去重后的长度)

作者:互联网

给出一组有序的序列,其中有重复数字,要求原地去重,并给出去重后数组的长度。(不能额外开辟数组)

这道题,如果用java的话,就肯定不能用set了。那我们可以用什么好办法呢?这里介绍一下双指针法。

什么是双指针法?就是我们先定义两个指针,一个快指针一个慢指针,分别指向数组的第二和第一个元素,快指针通过一个for循环不停地往后移,一旦碰到两个指针所指向的元素的值相等,那么就把快指针指向的元素赋给慢指针指向元素的下一个,然后快指针继续移动。等到遍历到数组的最后一个元素时,结束循环,这个时候再把慢指针的值返回,就可以了。

 1 package com.hw.list0710;
 2 
 3 import java.util.Scanner;
 4 
 5 public class Remove {
 6     private static int removeDuplicates(int[] arr){
 7         if(arr.length == 0){
 8             return 0;
 9         }
10         int i = 0; //定义一个慢指针
11         for(int j = 1;j < arr.length;++j){
12             //如果相等就让j往后移,这没影响,所以j是一个快指针
13             if(arr[i] != arr[j]){
14                 arr[++i] = arr[j];  //如果不相等,把j位置的元素赋给i的下一位
15             }
16         }
17         return i+1;
18     }
19 
20     public static void main(String[] args) {
21         int[] nums = null;
22         Scanner s = new Scanner(System.in);
23         System.out.println("数组长度:");
24         int len = s.nextInt();
25         nums = new int[len];
26         System.out.println("请按照从小到大的顺序输入数据:");
27         for(int i = 0;i < len;i++){
28             nums[i] = s.nextInt();
29         }
30         s.close();
31         int length = removeDuplicates(nums);
32         System.out.println("去重后的数组长度是:"+length);
33     }
34 }

逻辑其实很简单,来看看运行效果:

 

标签:arr,int,重后,System,length,数组,长度,指针
来源: https://www.cnblogs.com/EvanTheGreat/p/14999109.html