我想把这期作为数组类面试题的一个总结,题目不难,但是要注意不要犯错,下面是容易犯错的地方:
1. ++,--后索引有可能不满足我们假设的条件,一般情况都需要判断,使用while,for,if进行条件检查;
2. ++,-- 和break或者continue配合时,可别搞乱了顺序
题目1: Given an array with positive, negative and zeros, arrange the given array such that negatives are on left, zeros in the middle and positives on the right.
打眼一看,这个问题特别简单,不就是两头遍历,然后交换吗,确实是这样子,思想特别简单,但是实现起来就容易出错了,下面是我的版本:
#includeusing namespace std;void groupInteger(int *data, int len){ int i = 0, j = len-1; while(i =0) j--; if(data[i]>=0 && data[j]<0 && i =0 或者 swap后j的位置或者j本身>=0,或者j+1的位置>=0 i++; j = len -1; while(i 0) j--; if(data[i]>0 && data[j]==0 && i
这个题目也是很有意思的,设计一下测试用例吧(这里只是验证功能,所以就只设计Functional cases):
1, {-1,0,2}
2, {2,0,-1,}
3, {-2,-2,3}
4, {-1,2}
5, {-1,0}
6, {1,2,3}
7, {0,0,0,0}
8, {-1,-2,-3,-4}