题目来源:
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);
- }
- }
总结:
犯了两个错,一个是将取模的模数打错,另一个是将赋值结果的取值范围与计算时的取值范围混淆。
无官方题解。