**比赛地址
第一题:**
给你一个表示某个正整数的字符串 number 和一个字符 digit 。
从 number 中 恰好 移除 一个 等于 digit 的字符后,找出并返回按 十进制 表示 最大 的结果字符串。
生成的测试用例满足 digit 在 number 中出现至少一次。
示例 1:
输入:number = "123", digit = "3"
输出:"12"
解释:"123" 中只有一个 '3' ,在移除 '3' 之后,结果为 "12" 。
示例 2:
输入:number = "1231", digit = "1"
输出:"231"
解释:可以移除第一个 '1' 得到 "231" 或者移除第二个 '1' 得到 "123" 。
由于 231 > 123 ,返回 "231" 。
示例 3:
输入:number = "551", digit = "5"
输出:"51"
解释:可以从 "551" 中移除第一个或者第二个 '5' 。
两种方案的结果都是 "51" 。
提示:
2 <= number.length <= 100
number 由数字 '1' 到 '9' 组成
digit 是 '1' 到 '9' 中的一个数字
digit 在 number 中出现至少一次
分析:
这道题不难就是字面意思,但是实现起来可能比较麻烦
这时候就体现到STL的优点了(首先你要知道)
源代码:
class Solution {
public:
string removeDigit(string number, char digit) {
string s;
for(int i=0;i<number.size();i++)
{
if(number[i]==digit)
{
s=max(number.substr(0,i)+number.substr(i+1,number.size()-1),s);
}
}
return s;
}
};
第二题:
给你一个整数数组 cards ,其中 cards[i] 表示第 i 张卡牌的 值 。如果两张卡牌的值相同,则认为
这一对卡牌 匹配 。
返回你必须拿起的最小连续卡牌数,以使在拿起的卡牌中有一对匹配的卡牌。如果无法得到一对匹配的卡
牌,返回 -1 。
示例 1:
输入:cards = [3,4,2,3,4,7]
输出:4
解释:拿起卡牌 [3,4,2,3] 将会包含一对值为 3 的匹配卡牌。注意,拿起 [4,2,3,4] 也是最优方
案。
示例 2:
输入:cards = [1,0,5,3]
输出:-1
解释:无法找出含一对匹配卡牌的一组连续卡牌。
提示:
1 <= cards.length <= 105
0 <= cards[i] <= 106
分析:
这道题就是让你求相同卡牌的距离的最小值
源代码:
class Solution {
public:
int minimumCardPickup(vector<int>& cards) {
unordered_map<int ,int> arr;
int mx=0x3f3f3f3f;
for(int i=0;i<cards.size();i++)
{
if(arr.count(cards[i]))
{
mx=min(mx,i-arr[cards[i]]+1);
}
arr[cards[i]]=i;
}
return mx==0x3f3f3f3f ? -1:mx;
}
};
最后一次更新于2022-05-02
0 条评论