2259. 移除指定数字得到的最大结果
class Solution {
public:
string removeDigit(string number, char digit) {
int pos = -1;
for(int i = 0;i < number.size();++i) {
if(number[i] == digit) {
pos = i;
if(i + 1 < number.size() && number[i + 1] > number[i]){
break;
}
}
}
return number.substr(0,pos)+ number.substr(pos + 1,number.size()-1);
}
};
6048. 必须拿起的最小连续卡牌数
通过
class Solution {
public:
int minimumCardPickup(vector<int>& cards) {
unordered_map<int,int> tags_map;
int n = cards.size();
int result = -1;
vector<int> vec;
for(int i=0; i<n; ++i)
{
// 找到了,则返回对应的数字
if(tags_map.find(cards[i]) != tags_map.end())
{
auto it = tags_map.find(cards[i]);
// tags_map[cards[i]] = i;
result =i - it -> second + 1;
tags_map[cards[i]] = i;
vec.emplace_back(result);
}
// 未查找到,返回一个指向tags_map.end()的指针,则需要初始化
else
{
tags_map[cards[i]] = i;
}
}
if(vec.size() > 0) {
sort(vec.begin(),vec.end());
return vec[0];
}
else
return result;
}
};
优化版本
class Solution {
public:
int minimumCardPickup(vector<int>& cards) {
/* map存数值cards[i]出现的最近一次下标 */
unordered_map<int,int> map;
int result = INT32_MAX;
for(int i = 0; i < cards.size(); i++){
if(map.count(cards[i]))
result = min(result,i - map[cards[i]] + 1);
map[cards[i]] = i;
}
return result == INT32_MAX ? -1 : result;
}
};
2261. 含最多 K 个可整除元素的子数组
class Solution {
public:
int countDistinct(vector<int>& nums, int k, int p) {
unordered_map<string, int> result;
for(int i = 0; i < nums.size(); i++) {
int count = 0;
string tmp = "";
for (int j = i; j < nums.size(); j++) {
if(nums[j] % p == 0) count += 1;
if(count > k) break;
tmp += nums[j] + '0';
result[tmp] = 1;//去重操作
}
}
return result.size();
}
};