2023-05-06 Daily Challenge
Today I have done leetcode's May LeetCoding Challenge with cpp
.
May LeetCoding Challenge 6
Description
Number of Subsequences That Satisfy the Given Sum Condition
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. [3] -> 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,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], [7]). Number of valid subsequences (63 - 2 = 61).
Constraints:
1 <= nums.length <= 105
1 <= nums[i] <= 106
1 <= target <= 106
Solution
auto speedup = [](){
cin.tie(nullptr);
cout.tie(nullptr);
ios::sync_with_stdio(false);
return 0;
}();
const int MOD = 1e9 + 7;
int qpow(int b, int e) {
int result = 1;
while(e) {
if(e & 1) {
result = 1LL * result * b % MOD;
}
b = 1LL * b * b % MOD;
e >>= 1;
}
return result;
}
class Solution {
public:
int numSubseq(vector<int>& nums, int target) {
sort(nums.begin(), nums.end());
int left = 0;
int right = nums.size() - 1;
int answer = 0;
while(left <= right && left < nums.size()) {
while(right >= 0 && left <= right && nums[left] + nums[right] > target) {
right -= 1;
}
if(right < 0) break;
if(left < right) {
answer += qpow(2, right - left);
} else if (nums[left] * 2 <= target) {
answer += 1;
}
answer %= MOD;
left += 1;
}
return answer;
}
};
// Accepted
// 62/62 cases passed (126 ms)
// Your runtime beats 89.87 % of cpp submissions
// Your memory usage beats 93.20 % of cpp submissions (47.6 MB)