1、找出字符串中第一次只出现一次的字符
其实就是使用map[256]遍历两次的方法
重点是这道题的测试用例标准输入的时候使用了while (scanf("%s", str) != EOF),这种写法值得研究研究
2、数组中重复的数字
在一个长度为n的数组里的所有数字都在0到n-1的范围,就是每一个树到该到的位置上
3、把字符串转换为整数
溢出的判断十分巧妙
4、连续子数组的最大和
就是不停的遍历,淘汰前缀为负数的情况
5、和为S的两个数字
如果有多对数字的和等于S,输出两个数的乘积最小的。
结论证明:
假设:找到两组满足条件的数组对(x,y)、(x+a,y-a),其中(x+y=S, 0<a<y-x)
x*y-[(x+a)(y-a)]
=x*y-x*y-(y-x)a+a
2
=a[a-(y-x)]
因为0<a<y-x,所以a-(y-x)<0,所以a[a-(y-x)]<0
因此(x,y)乘积一定比(x+a,y-a)小
随意第一次找到sum,直接就break