文章目录
41. 缺失的第一个正数
/*原地哈希*/
class Solution {
    public int firstMissingPositive(int[] nums) {
        for(int i = 0; i < nums.length; i++) {
            while(nums[i] > 0 && nums[i] <= nums.length && nums[i] != nums[nums[i] - 1] ) {
                swap(nums, i, nums[i]-1); //把nums[i]上的东西放到nums[nums[i]-1]的位置
            }
        }
        for(int i = 0; i < nums.length; i++) {
            if(nums[i] != i + 1) {
                return i + 1;
            }
        }
        return nums.length + 1;
    }
    private void swap (int[] nums, int index1, int index2) {
        int temp = nums[index1];
        nums[index1] = nums[index2];
        nums[index2] = temp;
    }
}
 
209. 长度最小的子数组
class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int left = 0, right = 0;
        int sum = 0;
        int minLen = Integer.MAX_VALUE;
        while(right < nums.length) {
            sum += nums[right];
            while(sum >= target) {
                minLen = Math.min(minLen, right - left + 1);
                sum -= nums[left];
                left ++; 
            }
            right ++;
        }
        return minLen = (minLen == Integer.MAX_VALUE) ? 0 : minLen;
    }
}
 
39. 组合总和 – 回溯
拿到这个题目能够想到是回溯+剪枝,但是和没思路差不多,没有想到要先排序。另外回溯“模板”还是不熟练,导致coding不上来。前几天做过的题和没做差不多。。。。。。
 class Solution {
 public List<List> combinationSum(int[] candidates, int target) {
 List<List> res = new ArrayList<>();
 List path = new ArrayList<>();
 //if (candidates.length == 0) return res;
 Arrays.sort(candidates);
 backtrack(candidates, target, res, path, 0);
 return res;
 }
 public void backtrack(int[] candidates, int target, List<List> res, List path, int begin) {
 if(target < 0)
 return;
 if(target == 0){
 res.add(new ArrayList<>(path));
 return;
 }
 for(int i = begin; i < candidates.length; i ++) {
 //剪枝
 if(candidates[i] > target)
 return;
 if(i > 0 && candidates[i] == candidates[i-1])
 continue;
 //回溯套路
 path.add(candidates[i]);
 backtrack(candidates, target - candidates[i], res, path, i);
 path.remove(path.size()-1);
 }
 }
 }










