原文地址【华为OD题库-035】数据最节约的备份方法-java_数据最节约的备份方法java-CSDN博客
解题思路
这个题跟那个【信道分配】有类似之处,信道分配更复杂需要回溯,这个简单只需要正向遍历即可
。前提先把数据按大-》小排序,然后双指针向右移动,遵循原则,在不超过500容量情况下,尽可能的消耗大数,小数留到后面,如 300 200 100 100, 300+200=500 300+100+100=500优先用前面的组合
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()) {
int[] nums = Arrays.stream(sc.nextLine().split(",")).mapToInt(Integer::parseInt).toArray();
System.out.println(solution(nums, 0));
}
}
public static int solution(int[] nums, int count){
for(int i=0;i<nums.length;i++) { // 访问过的标记为-1
if(nums[i] != -1) {// not be mark used
int sum = nums[i];
for(int j=i+1; j< nums.length; j++) {
if(nums[j] != -1) {
if(sum+ nums[j] <= 500) {
sum += nums[j];
nums[j] = -1; //mark
}else {
count +=1;
break;
}
}
}
nums[i] = -1;
}
}
return count;
}