码迷,mamicode.com
首页 > 编程语言 > 详细

"双指针"去重有序数组

时间:2021-04-22 16:22:56      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:++i   rgb   ios   mes   out   main   相等   cout   信息   

此处双指针代表的是一种思想,即两个(或多个)"先锋"动态式跟随并进行信息交流[个人理解],样例如下:

 

先输入数组大小,然后依次赋值(按照升序)

①若不得有重复元素,代码如下:

 1 #include<iostream>
 2 using namespace std;
 3 
 4 const int N = 1001;
 5 int a[N];
 6 int main()
 7 {
 8     
 9     int n;
10     cin>>n;
11     for(int i=0;i<n;++i)cin>>a[i];
12     
13     int k=1;
14     for(int i=1;i<n;++i)    
15         if(a[i]!=a[k-1])//核心
16             a[k++]=a[i];//
17     for(int i=0;i<k;++i)
18         cout<<a[i]<< ;
19     
20     return 0;
21  } 

 

②若是不同的数字各自最多有两个,我们只需要把第15行代码写为

    if(a[i]!=a[k-1]||a[i]!=a[k-2])

其实还可以继续优化,即

    if(a[i]!=a[k-2])

稍微有点绕,即a[k-2]下标所在元素若是与a[i]不相等的话,则证明a[i]的数字在a[k]之前(不包括a[k])顶多出现过两次;否则忽视a[i],继续向后遍历

 

"双指针"去重有序数组

标签:++i   rgb   ios   mes   out   main   相等   cout   信息   

原文地址:https://www.cnblogs.com/Knight02/p/14687629.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!