题目来源:
leetcode题目,网址:LCP 28. 采购方案 - 力扣(LeetCode)
解题思路:
将数组排序后使用双指针解题。双指针,一个指针从后往前遍历每一个值,另一个指针开始时指向前一个允许最大值,往后遍历直至与另一个指针重合或者两指针数据之和大于目标值。
解题代码:
class Solution {
public int purchasePlans(int[] nums, int target) {
double res=0;
Arrays.sort(nums);
int pre=0;
for(int i=nums.length-1;i>0;i--){
if(nums[i]>=target){
continue;
}
for(int j=pre;j<i && nums[j]<=target-nums[i];j++){
pre=j;
}
if(nums[pre]+nums[i]<=target){
if(pre==i-1){
res+=1.0*i*(i+1)/2;
break;
}
res+=(pre+1);
}
}
return (int)(res%1000000007);
}
}
总结:
犯了两个错,一个是将取模的模数打错,另一个是将赋值结果的取值范围与计算时的取值范围混淆。
无官方题解。