**比赛地址
第一题:**
给你一个表示某个正整数的字符串 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; } };