首页 > 编程语言 > 详细

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

时间:2021-07-11 21:57:10      阅读:31      评论:0      收藏:0      [点我收藏+]

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

这道题,如果用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 }

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

技术分享图片

 

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

原文:https://www.cnblogs.com/EvanTheGreat/p/14999109.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!