携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第30天,点击查看活动详情
6160. 和有限的最长子序列
难度简单7
给你一个长度为 n 的整数数组 nums ,和一个长度为 m 的整数数组 queries 。
返回一个长度为 m 的数组 **answer **,其中 **answer[i] **是 nums 中 元素之和小于等于 queries[i] 的 子序列 的 最大 长度 。
子序列 是由一个数组删除某些元素(也可以不删除)但不改变剩余元素顺序得到的一个数组。
示例 1:
输入: nums = [4,5,2,1], queries = [3,10,21]
输出: [2,3,4]
解释: queries 对应的 answer 如下:
- 子序列 [2,1] 的和小于或等于 3 。可以证明满足题目要求的子序列的最大长度是 2 ,所以 answer[0] = 2 。
- 子序列 [4,5,1] 的和小于或等于 10 。可以证明满足题目要求的子序列的最大长度是 3 ,所以 answer[1] = 3 。
- 子序列 [4,5,2,1] 的和小于或等于 21 。可以证明满足题目要求的子序列的最大长度是 4 ,所以 answer[2] = 4 。
示例 2:
输入: nums = [2,3,4,5], queries = [1]
输出: [0]
解释: 空子序列是唯一一个满足元素和小于或等于 1 的子序列,所以 answer[0] = 0 。
代码:
class Solution {
public:
vector<int> answerQueries(vector<int>& nums, vector<int>& queries) {
int n = nums.size(), m = queries.size();
vector<int> ret(m);
sort(nums.begin(), nums.end());
int cnt = 0;
for (int i = 0; i < m; i++) {
long long s = 0;
int ans = 0;
for (int j = 0; j < n; j++) {
s += nums[j];
if (s <= queries[i]) {
ans = max(ans, j + 1);
}
}
ret[cnt++] = ans;
}
return ret;
}
};
6161. 从字符串中移除星号
难度中等3
给你一个包含若干星号 * 的字符串 s 。
在一步操作中,你可以:
- 选中
s中的一个星号。 - 移除星号 左侧 最近的那个 非星号 字符,并移除该星号自身。
返回移除 所有 星号之后的字符串 。
注意:
- 生成的输入保证总是可以执行题面中描述的操作。
- 可以证明结果字符串是唯一的。
示例 1:
输入: s = "leet**cod*e"
输出: "lecoe"
解释: 从左到右执行移除操作:
- 距离第 1 个星号最近的字符是 "leet**cod*e" 中的 't' ,s 变为 "lee*cod*e" 。
- 距离第 2 个星号最近的字符是 "lee*cod*e" 中的 'e' ,s 变为 "lecod*e" 。
- 距离第 3 个星号最近的字符是 "lecod*e" 中的 'd' ,s 变为 "lecoe" 。
不存在其他星号,返回 "lecoe" 。
示例 2:
输入: s = "erase*****"
输出: ""
解释: 整个字符串都会被移除,所以返回空字符串。
代码:
class Solution {
public String removeStars(String s) {
if (s.length() == 0) {
return s;
}
int cnt = 0;//倒序统计*的数量
String ans = "";
for (int i = s.size() - 1; i >= 0; i--) {
if (s[i] == '*') {
cnt++;
} else {
if (cnt > 0) {
cnt--;
} else {
ans = s[i] + ans;
}
}
}
return ans;
}
}