第 73 场力扣夜喵双周赛

第 73 场力扣夜喵双周赛

数组中紧跟 key 之后出现最频繁的数字

题目大意

	给你一个nums数组和key,求nums[i] == key && nums[i] == target 的最大次数
	换句话就是让你找num[i]==key后面出现一位出现最多的数

思路

	直接模拟即可

代码

class Solution {
public:
    int mostFrequent(vector<int>& nums, int key) {
        int cnt[1010];
        memset(cnt, 0, sizeof cnt);
        for ( int i = 0; i <= nums.size() - 2; i ++ )
        
            if (nums[i] == key) cnt[nums[i + 1]] ++;
        
        int res,ans = 0;
        for ( int i = 1; i <= 1000; i ++ )
        {
            if (cnt[i] > ans)
            {
                ans = cnt[i];
                res = i;
            }
        }
        return res;
    };
};

将杂乱无章的数字排序

题目大意

请添加图片描述

思路

	通过to_string 和 stoi 将结果存在map里最后遍历即可

代码

class Solution {
public:
    vector<int> sortJumbled(vector<int>& mapping, vector<int>& nums) {
        int n = nums.size();
        map<int,vector<int> > mp;
        for(int i = 0 ; i < n ; i ++) {
            string s = to_string(nums[i]);
            for(auto& t:s) t = mapping[t-'0']+'0';
            mp[stoi(s)].push_back(nums[i]);
        }

        vector<int> ans;
        for(auto& [x,y] : mp)
            for(auto& e : y) 
                ans.push_back(e);
            
        
        return ans;
    }
};

有向无环图中一个节点的所有祖先

题目大意

请添加图片描述

思路

bfs每一个点即可

代码

class Solution {
public:
    vector<vector<int>> getAncestors(int n, vector<vector<int>>& edges) {
        vector<vector<int>> e(n);
        for(auto& t:edges) e[t[0]].push_back(t[1]);

        auto bfs = [&](int s){
            vector<int> d(n);
            d[s] = 1;
            queue<int> que;
            que.push(s);
            while(que.size()) {
                auto w = que.front(); que.pop();
                for(auto v:e[w]){
                    if(!d[v]) {
                        d[v] = 1;
                        que.push(v);
                    }
                }
            }
            return d;
        };
        vector<vector<int>> ans(n);
        for(int i = 0 ; i < n ; i ++) {
            auto d = bfs(i);
            for(int j = 0 ; j < n ; j ++){
                if(i != j && d[j]) ans[j].push_back(i);
            }
        }
        return ans;
    }
};

得到回文串的最少操作次数

题目大意

请添加图片描述

思路

	双指针匹配[i,j]

代码

class Solution {
public:
    int minMovesToMakePalindrome(string s) {
        int n = s.size(),cnt = 0;

        for(int i = 0 , j = n - 1 ; i < n / 2 ; i ++) {
            bool find = 0;
            for(int k = j ; k > i ; k --) {
                if(s[k] == s[i]) {
                    for(;k < j ; k ++){
                        swap(s[k],s[k+1]);
                        cnt ++;
                    }
                    find = 1;
                     --;
                    break;
                }
            }
            if(!find) {
                cnt += n/2-i;
            }
        }
        return cnt;
    }
};
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰镇白干

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值