39. 组合总和 & 40. 组合总和 II
前者数组中的数字可以重复, 后者不可以;
前者数组中无重复数字, 后者有;
前者不需要排序,后者需要;
前者:
dfs(candidates, i, target - candidates[i]);
后者:
dfs(candidates, i + 1, target - candidates[i]);//别忘了 + 1
后者多了判重:
while(i != len - 1 && candidates[i] == candidates[i + 1]) {
i++;
}
因为:candidates 中的每个数字在每个组合中只能使用 一次 ;
41. 缺失的第一个正数
用HashSet;
35. 搜索插入位置
if(nums[i] >= target) {
return i;
}
34. 在排序数组中查找元素的第一个和最后一个位置
一前一后,两次遍历,找到始端和终端;
for(int i = 0; i < nums.length; i++) {
if(nums[i] == target) {
a = i;
break;
}
}
for(int i = nums.length - 1; i >= 0; i--) {
if(nums[i] == target) {
b = i;
break;
}
}
return new int[]{a, b};