1.题目:2389. 和有限的最长子序列 - 力扣(LeetCode)
思路:先把数组从小到大排序,再for循环从第一个值开始往后看累加是否小于等于j,不满足条件时跳出给res赋值,若都满足条件,则res为数组总长
class Solution {
public:
vector<int> answerQueries(vector<int>& nums, vector<int>& queries) {
sort(nums.begin(), nums.end());
int n = queries.size();
vector<int> res(n);
for(int i = 0; i < n; i ++)
{
int sum = 0;
for(int j = 0; j < nums.size(); j ++)
{
sum += nums[j];
if(sum > queries[i])
{
res[i] = j;
break;
}
//当sum大于目标值的时候长度为j
}
if(sum <= queries[i]) res[i] = nums.size(); //如果加起来总和小于所给值,即结果为数组长度
}
return res;
}
};
2.题目:2390. 从字符串中移除星号 - 力扣(LeetCode)
思路:使用双指针,用快指针遍历,若不为*,慢指针跟着走,当有*时,慢指针--,等于未把*号算进去并且去掉了*前的值
class Solution {
public:
string removeStars(string s) {
int x = 0;
int y = 0;
for(; x < s.size(); x ++)
{
if(s[x] == '*')
{
y--;
}
//y--等于未把*赋值并去掉了前面的数
if(s[x] != '*')
{
s[y] = s[x];
y ++;
}
}
//遍历字符串,若为*慢指针减,若不为*,则把当前值赋给慢指针的位置
string res(y, ' ');
for(int i = 0; i < y; i ++)
{
res[i] = s[i];
}
//结果保留剩余s前y的字符串
return res;
}
};