# 1498. Number of Subsequences That Satisfy the Given Sum Condition

Medium
You are given an array of integers `nums` and an integer `target`.
Return the number of non-empty subsequences of `nums` such that the sum of the minimum and maximum element on it is less or equal to `target`. Since the answer may be too large, return it modulo `109 + 7`.
Example 1:
Input: nums = [3,5,6,7], target = 9
Output: 4
Explanation: There are 4 subsequences that satisfy the condition.
 -> Min value + max value <= target (3 + 3 <= 9)
[3,5] -> (3 + 5 <= 9)
[3,5,6] -> (3 + 6 <= 9)
[3,6] -> (3 + 6 <= 9)
Example 2:
Input: nums = [3,3,6,8], target = 10
Output: 6
Explanation: There are 6 subsequences that satisfy the condition. (nums can have repeated numbers).
 ,  , [3,3], [3,6] , [3,6] , [3,3,6]
Example 3:
Input: nums = [2,3,3,4,6,7], target = 12
Output: 61
Explanation: There are 63 non-empty subsequences, two of them do not satisfy the condition ([6,7], ).
Number of valid subsequences (63 - 2 = 61).
Constraints:
• `1 <= nums.length <= 10^5`
• `1 <= nums[i] <= 10^6`
• `1 <= target <= 10^6`

### 解題

package main
import (
"fmt"
"math"
)
func main() {
for i := 0; i < 10000; i++ { //題目 nums 長度最大 10000
fmt.Println(powInt(2, i))
}
}
func powInt(x, y int) int {
return int(math.Pow(float64(x), float64(y)))
}
func numSubseq(nums []int, target int) int {
sort.Ints(nums)
left, right := 0, len(nums)-1
ans := 0
pow2 := make([]int, len(nums)+1)
pow2 = 1
for i := 1; i <= len(nums); i++ {
pow2[i] = (pow2[i-1] * 2) % 1000000007
}
for left <= right {
if nums[left] + nums[right] <= target {
ans += pow2[right-left]
left++
} else {
right--
}
}
return ans % 1000000007
}