洛谷P1094 纪念品分组(Java)
程序员文章站
2022-07-16 12:04:41
...
题目
注:90分,超时错误一个,请大佬指教。
输入输出样例
输入:
100
9
90
20
20
30
50
60
70
80
90
输出
6
思路:
1,从大到小排序
2,两个标记i,j分别从数组往后和往前,如果v[i]+v[j]比给定的值要小,这两个就算一个,结果加一;如果v[i]+v[j]比给定的值要大,就只要大的那个,让它单独一组,小的继续往后找。
代码
package 贪心;
import java.util.Arrays;
import java.util.Scanner;
public class P1094纪念品分组 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int w=sc.nextInt();
int n=sc.nextInt();
int[] v=new int[n];
for (int i = 0; i < n; i++) {
v[i]=sc.nextInt();
}
Arrays.sort(v);
int cnt=0;
//思路对了,但是实现方法不对,别用双重for循环,用两个变量标记
int i=0,j=n-1;
while (i<=j){
if (v[i]+v[j]<=w){
cnt++;
i++;
j--;
continue;
}else{
cnt++;
j--;
continue;
}
}
System.out.println(cnt);
}
}
上一篇: 63. 不同路径 II
下一篇: LeetCode 63. 不同路径 II