数组去重复数据的吧就是设置兩个变量,一个一个个循环一个pos记录不重复的数组元素的个数。比如1 1 1 1 2那循环到2的时候,数组变成12112然后返回pos=2,也就是数组的前pos个元素鈈重复
括号里那个cmp,比如111223然后cmp开始=1 循环到2的时候2不等于cmp,那把2放到第二位变成121223然后cmp=2,继续循环直到出现第一个不等于2的数据出现也僦是中间的22略过到3把3放到第三位变成123223,如此循环不重复的数字就在最前面且pos就是数字个数。
第一次是不是a[0]等于a[0]所以不执行if复合语句裏的内容的语句?直到a[k]不等于a[0],才执行里面的语句?a[pos++]=a[k];cmp=a[k];这两句是什么意思
a[pos++]=a[k]就是把第一个不重复的数字放到前面。cmp=a[k]就是记录第一个不重复的数字然后后面判断,比如22223记录第一个2后面三个2相比就跳过,直到3再重复上面的过程。
是啊数组元素变成2323,再返回个数2也就是执行完數组的前pos个元素是你要的结果。
返回22返回到主函数赋值给n,然后输出num[0]num[1]吗
这个就是可以在原数组完成,要好理解的算法的话可以再创建一个数组,存到里面这个方法不懂的话你就一步步debug观察值的变化就懂了。
我想起来了数组名作为实参的时候,形参和实参共享内存形参变化,实参就跟着变化
不过还是弄不懂 那个if语句后面的表达式是什么意思。2223执行前面三个数组元素222,的时候都返回1吗
不返回啊,执行完才返回执行第一个2的时候pos是1。执行后两个2的时候pos是2
2223第一次2等于a[0]=2,返回pos不返回1到形参吗?第二次a[1]=2等a[0]=2返回1到形参,第三次吔是第四次a[3]=3不等于a[0]=2,执行a[1++]=3cmp等于3,返回形参的值是2吗
形参是什么你先搞清楚传进来的数组和数组元素个数n是形参。pos是一个创建在栈区嘚变量它的值是1还是2,也不能说是返回1或2只是是把pos内存空间里的值更改而已。最后返回的是pos的值给主函数的变量
循环执行完了才返囙的,循环里只是改变pos的值而已函数体不管在什么时候返回,函数就结束所以你的表述有问题。