分享一些练习题和大致解题思路(C语言)
分享的题基本都是各大网站,或者丛书中出的比较优秀的题,或者是博主看到的写过的一些题,由于博主也是一位刚入门的萌新,水平有限,现在可能不会出什么非常难的题,但是对于初入c语言的学员应该会有些帮助,好的现在开始(答案会放在另一个分组中,答案会是博主自己手打的,可能会有错误或者更优解也非常欢迎探讨交流一番)
题目
-
求一个有序数组中的两个元素值相加为k的数字,返回这两个元素的下标,要求时间复杂度是O(n),空间复杂度是O(1)
-
如何判断一个数n是否是2的k次方?注意:不用求k是多少,只需要判断,请编写函数实现
-
字符串压缩,输入字符串只包含a-z字母以及结束标志,请编写函数实现对连续出现的相同字符进行压缩,例如:
"xxxyyyyz"
压缩后字符串为"3x4yz"
,"yyyyyyy"
压缩后为"7y"
-
编写代码实现如下功能:删除字符串收尾的空格,中间的连续空格只留一个,原来字符串的顺序不变,如"*****as ***** adadq *****"(*是空格)变成"as*aadadq"
解题思路
今天的题目还是有点挑战性的,大家加油啊
-
这是一个有序的字符串,定义两个指针,一个从头走,一个从尾走,两个指针指向的数相加,打了后面的指针向前走,小了前面的指针向后走,知道找到为止
-
前几期求过一个二进制数中出现过多少的1,这个和那个很像,什么是二的次数
0000 0001 //1
0000 0010 //2
0000 0100 //4
所以判断二的次数就是二进制数中只出现1次1的数
可以使用">>"该符号来算出出现1的次数,然后看出现1的次数是几来判断是不是2的次数
还有一种方法,直接用 x&x(x-1) 是否等于0 来判断
本来这个式子是执行几次之后等于0,就可以知道有几个1,那执行一次式子等于0就代表只有一个1 -
不需要想的太复杂,数每个字母出现的个数打印出来就行,不需要对字符串进行修改
printf("%d%c\n") %d是出现次数%c是哪个字母 -
本题比较难,看图
分享一下
如果对题目感兴趣可以看看前几期的题
第五期链接https://blog.csdn.net/Heart_of_collaps/article/details/100531850
第四期链接https://blog.csdn.net/Heart_of_collaps/article/details/100523563
每一期都会在其他分组中放上答案,如果写不出来,可以参考答案对照着来写