题干
思路
用双指针的方法解决问题:
设置两个指针left,right
【一个指针在循环条件里,一个指针在函数体里】
left=0,right=1;
当right所指向的值与left相等时,right往前挪一位;
当right所指向的值与left不相等时:
①left先向前挪一位
②right的值赋值给left所指向的值
③right向前挪一位
具体代码
#include<bits/stdc++.h>
using namespace std;
int main(){
//双指针解决
int A[10]={0,0,0,0,0,0,0};
//边界条件判断
int num = sizeof(A) / sizeof(int);
if (A == NULL ||num == 0)
return 0;
int left = 0;
for (int right = 1; right < num; right++)
//如果左指针和右指针指向的值一样,说明有重复的,
//这个时候,左指针不动,右指针继续往右移。如果他俩
//指向的值不一样就把右指针指向的值往前挪
if (A[left] != A[right])
A[++left] = A[right];
for (int i = 0;i<left+1;i++){
printf("%d ",A[i]);
}
}
期间遇到的问题
所以就把求数组长度的方法换成了如下方式:
引入一个num变量,然后用操作符sizeof
求出A所占的位数,除以整数所占的位数,就是这个整数数组的长度。
int num = sizeof(A) / sizeof(int);
而不是用length函数求。