Clue
Logic Flaw
- 之前确定了longArray和shortArray,感觉用shortArray做map会更快,但是却忘了另一个array决定着答案的数量
- 忘记了value并非自然数,可以为负数,如果加入result,需要确定value>0
- 在用arraylist复制到int[]的时候,注意如果用_arraylist.remove(i)会改变原结构, i会溢出.
BinarySearch的bugs
- 在用BinaryArray的时候, 找到相等的, 应该向前追溯到第一个,作为startIndex
- 但要注意,小心i == 1啊
private static int binarySearch (int[] num, int start, int end, int target) {
while(start <= end) {
int mid = start + (end - start)/2;
if (num[mid] == target) {
while (mid > 1 && mid > start && num[mid] == num[mid - 1])
--mid;
return mid;
} else if (num[mid] > target) {
end = mid - 1;
} else {
start = mid + 1;
}
}
return -1;
}
- 看中间的while,其实没必要, 其实可以继续用binary算法,就当作num[mid] > target
- 并且除去上面的bug 也还有问题, mid == start 的时候就不返回了,这样不对.
Attention
- If compare two sorted arrays, we usually don’t use self-increased indexes, like for loop
- Don’t forget to increase both indexes if equals