https://drive.google.com/drive/folders/1BTKV760sLnrdtP8WhGJQaqpZjoaEZhUd?usp=sharing
如何避免kafka中的一个消息被消耗两次 -分区
hashmap内部的结构是什么样的,两个值相同的object当作key size会是多少
回溯法初始的index = 0,才能算出重复值 eg (1,3) (3,1)
复杂度:数组元素个数n的(target)次方
/**
Given an array of distinct integers nums and a target integer target, return the number of possible combinations that add up to target.
Input: nums = [1,2,3], target = 4
Output: 7
Explanation:
The possible combination ways are:
(1, 1, 1, 1)
(1, 1, 2)
(1, 2, 1)
(1, 3)
(2, 1, 1)
(2, 2)
(3, 1)
Note that different sequences are counted as different combinations.
result = [[1, 1, 1, 1], [1, 1, 2], [1, 3], [2, 2]]
*/
import java.util.*;
public class MyClass {
public static void main(String args[]) {
int[] nums = {1,2,3};
int target = 4;
List<List<Integer>> result = new ArrayList<List<Integer>>();
//sort
Arrays.sort(nums);
backtrace(nums, 0, new ArrayList<>(), result, 0, target);
System.out.println("result = " + result);
System.out.println("result.size() = " + result.size());
}
public static void backtrace(int[] nums, int start, List<Integer> temp,
List<List<Integer>> result, int currSum, int target) {
//exit case
if (currSum == target) {
result.add(new ArrayList<>(temp));
}else if (currSum > target) {
return ;
}else {
for (int i = 0; i < nums.length; i++) {
//handle duplicate
// if (temp.contains(nums[i]))
// continue;
//backtrace
temp.add(nums[i]);
backtrace(nums, i, temp, result, currSum + nums[i], target);
temp.remove(temp.size() - 1);
}
}
}
}