leetcode第124场双周赛

第一题:相同分数的最大操作数目I

给你一个整数数组 nums ,如果 nums 至少 包含 2 个元素,你可以执行以下操作:

  • 选择 nums 中的前两个元素并将它们删除。

一次操作的 分数 是被删除元素的和。

在确保 所有操作分数相同 的前提下,请你求出 最多 能进行多少次操作。

请你返回按照上述要求 最多 可以进行的操作次数。

示例 1:

输入:nums = [3,2,1,4,5]
输出:2
解释:我们执行以下操作:
- 删除前两个元素,分数为 3 + 2 = 5 ,nums = [1,4,5] 。
- 删除前两个元素,分数为 1 + 4 = 5 ,nums = [5] 。
由于只剩下 1 个元素,我们无法继续进行任何操作。

代码:模拟一下题目就行

class Solution {
public:
    int maxOperations(vector& nums) {
        int i;
        if(nums.size()==2) return 1;
        else{
            int cnt=1,target=nums[0]+nums[1];
            for(i=2;i

第二题:进行操作使字符串为空

给你一个字符串 s 。

请你进行以下操作直到 s 为  :

  • 每次操作 依次 遍历 'a' 到 'z',如果当前字符出现在 s 中,那么删除出现位置 最早 的该字符。

请你返回进行 最后 一次操作 之前 的字符串 s 

示例 1:

输入:s = "aabcbbca"
输出:"ba"
解释:我们进行以下操作:
- 删除 s = "aabcbbca" 中加粗加斜字符,得到字符串 s = "abbca" 。
- 删除 s = "abbca" 中加粗加斜字符,得到字符串 s = "ba" 。
- 删除 s = "ba" 中加粗加斜字符,得到字符串 s = "" 。
进行最后一次操作之前的字符串为 "ba" 。

思路:题目所求为最后一次操作前的字符串,先用map统计各个字符出现的次数,因为要最后留下,所以就是找最大的次数,到现在最后一次操作的字符找到了,但是有先后顺序,那就在设一个map,去统计,去看谁先到达最大的次数,谁的位置就在前面

class Solution {
public:
    string lastNonEmptyString(string s) {
        maphash;
        mapkash;
        string s1="";
        for(auto o:s){
            hash[o]++;
        }
        int m=0;
        for(auto o:s){
            m=max(m,hash[o]);
        }
        if(m==1)  return s;
        else{
            for(auto o:s){
                kash[o]++;
                if(kash[o]==m) s1+=o;
            }
            return s1;
        }
        
    }
};

你可能感兴趣的:(leetcode,leetcode,算法,数据结构)