Leetcode 1498. Number of Subsequences That Satisfy the Given Sum Condition
题目链接: Number of Subsequences That Satisfy the Given Sum Condition
难度:Medium
题目大意:
输入一个数组和一个数target,从子数组中选择若干个数组成子数组,要求子数组的最大值与最小值之和不超过target,求符合题意的子数组的个数。
思路:
将数组进行排序,先选择最小值,然后寻找满足题意最大的那个最大值,确定好最小值和最大值之后,子数组必须含最小值,最小值和最大值之间的数(含最大值)都可有可无,计算有多少种情况。
代码
class Solution {//双指针
public int numSubseq(int[] nums, int target) {
Arrays.sort(nums);
int n=nums.length;
int ans=0;
int mod=1000000007;
int[] pow =new int[n];
pow[0]=1;
for(int i=1;i<n;i++){
pow[i]=pow[i-1]*2%mod;
}//这么做防止数值过大超出表示范围
int l=0,r=n-1;
while(l<=r){
if(nums[l]+nums[r]>target){
r--;
}
else{
ans=(ans%mod+pow[r-l]%mod)%mod;
l++;//nums[l++]不小于nums[l],所以r肯定要不变或者减小才能满足条件
}
}
return ans;
}
}