nums 1 3 5 target 7
正解应该是 1*2 + 5 = 7 和 1 + 3*2 = 7
1.尽量都用到数
2.相加最接近target
3.正解可能不唯一,用到nums最大数,用的最多的解放在前面
求解
我自己想的是
static List<Map<Integer, Integer>> match(int[] nums, int target) {
//1.所有的元素都需要包含
//2.最优的策略=最少的元素个数->从使用最大的元素开始开始
Map<Integer, Integer> map = new HashMap<>();
if (nums == null || nums.length == 0) {
return null;
}
int remain = target; //剩余量
//最终结果
List<Map<Integer, Integer>> list = new ArrayList<Map<Integer, Integer>>();
//从最大的是数值开始获取数据
for (int i = nums.length-1 ; i>0 ; i--) {
for (int num : nums) {
while (remain >= num) {
int cnt = 0;
if (map.containsKey(num)) {
cnt = map.get(num);
}
map.put(num, cnt + 1);
remain = remain - num;
}
}
if (remain == 0) {//正好匹配
list.add(map);
}else{
//如果不匹配还需要判断
}
map = new HashMap<>();
remain = target;
nums = deleteFirst(nums);
}
return list;
}
求优化 求最优解