近期在牛客上面刷题遇到了上述问题,对于刚接触C的我还是有些头疼,所以写这篇文章整理一下思路。
文章推荐人群:刚接触C的广大同志们
我将以 题+代码+简易的思路 的方式进行,提前感谢老铁们的阅览!
序列是否有序
代码:
题目中设置2个标记变量,flag1,flag2,满足相邻2个元素升序把flag1设置为1,满足相邻2个元
素降序把flag2设置为1.如果flag1和flag2都是1,那就是乱序。
ps:我一开始的时候写成if(flag1 + flag2 == 1),这种错误写法,因为我忽略了“1 1 1 1”or“9 9 9 9”类似这样的数据,它既可以是升序也可以是降序,所以导致可能出现1+1 = 2这种情况!希望大家不要因为数据思考片面而导致想我一样的低级错误。
序列中删除指定数字
代码:
要考虑删除多个相同的数字。
j++在这里使用的很妙,核心与下面一题相似,简单的解释放下面了。
序列中整数去重
代码:
关键代码(核心)图解:
j++同时兼有计数功能,j先使用后++,可以完成真正意义上的清除重复的数值—》举个例子:不会出现10 12 93 75 75(使用上面图片的数据)这样尴尬的打印。
ps:我第一次就是弄了这个尴尬的打印,haha!
有序序列合并问题
代码:
1. 只是打印出合并后的结果,所以不需要存储。
2. 先在2个数组中找较小的一次打印,等有一个数组中没有元素了,打印另外一个数组剩下的元素。
*因为两个数组中元素个数可能不相同,为了可以完整的打印(符合题意的)所以下面使用了if与else,看代码应该就可以理解了,就不详细说了;
说一下核心:两个数组依次进行比较,i与j是为了方便控制两个数组而引进的,如果元素个数不同比较后(while循环内)退出,接下来进行*的操作。结合代码应该可以很好的理解。
结尾再次感谢老铁们的阅读,初次写CSDN加上刚学C不久,文章内容与代码解释质量不高,也请老铁们谅解,同时也希望大家提出宝贵的指导与建议!
最后感谢bit鹏哥