"双指针"去重有序数组

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

 

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

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

 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],继续向后遍历

 

天涯犹在,不诉薄凉。
原文地址:https://www.cnblogs.com/Knight02/p/14687629.html