力扣376周赛

这篇具有很好参考价值的文章主要介绍了力扣376周赛。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

力扣第376场周赛

找出缺失和重复的数字

map模拟

class Solution {
public:
    vector<int> findMissingAndRepeatedValues(vector<vector<int>>& grid) {
        int n = grid.size() , m = grid[0].size();
        map<int,int>mi;
        for(int i = 0 ; i < n ; i ++){
            for(int j = 0 ; j < m ; j ++){
                mi[grid[i][j]] ++;
            }
        }
        vector<int> ans;
        for(int i = 1 ; i <= n * n ; i ++){
            if(mi[i] > 1)ans.push_back(i);
        }
        for(int i = 1 ; i <= n * n ; i ++){
            if(mi[i] == 0)ans.push_back(i);
        }
        return ans;
    }
};

划分数组并满足最大差限制

排序后直接模拟

class Solution {
public:
    vector<vector<int>> divideArray(vector<int>& nums, int k) {
        vector<vector<int> >ans;
        vector<vector<int> >res;
        int n = nums.size();
        ranges::sort(nums);
        bool f = true;
        if(n % 3 != 0)f = false;
        for(int i = 0 ; i + 2 < n ; i += 3){
            int a = nums[i] , c = nums[i + 2];
            if(c - a > k)f = false;
            ans.push_back({a , nums[i + 1] , c});
        }
        if(f == false)return res;
        return ans;
    }
};

使数组成为等数数组的最小代价

找到中位数再二分最近的回文

//代码来自TsReaper
bool inited = false;
vector<int> good;

void init() {
    if (inited) return;
    inited = true;

    for (int i = 1; i < 10; i++) good.push_back(i);

    // 首先枚举回文数一半的长度 len,以及这一半数值的上限 p
    for (int p = 10, len = 1; p <= 1e4; p *= 10, len++) {
        // 枚举回文数的一半具体是什么数
        for (int i = 1; i < p; i++) if (i % 10 != 0) {
            // 把每个数位拆开来
            vector<int> vec;
            for (int x = i, j = len; j > 0; x /= 10, j--) vec.push_back(x % 10);
            
            // 回文数长度是偶数的情况
            int v = 0;
            for (int j = 0; j < len; j++) v = v * 10 + vec[j];
            for (int j = len - 1; j >= 0; j--) v = v * 10 + vec[j];
            good.push_back(v);

            // 回文数长度是奇数的情况,需要枚举中间那一位是什么数
            for (int k = 0; k < 10; k++) {
                v = 0;
                for (int j = 0; j < len; j++) v = v * 10 + vec[j];
                v = v * 10 + k;
                for (int j = len - 1; j >= 0; j--) v = v * 10 + vec[j];
                good.push_back(v);
            }
        }
    }

    sort(good.begin(), good.end());
}

class Solution {
public:
    long long minimumCost(vector<int>& nums) {
        init();

        int n = nums.size();
        sort(nums.begin(), nums.end());

        // 计算所有数都变成 x 的代价
        auto get = [&](int x){
            long long res = 0;
            for(int i = 0 ; i < n ; i ++){
                res += abs(nums[i] - x);
            }
            return res;
        };
        long long ans = 1e18;
        int idx = lower_bound(good.begin(), good.end(), nums[n / 2]) - good.begin();
        ans = min(ans, get(good[idx]));
        if (idx - 1 >= 0) ans = min(ans, get(good[idx - 1]));
        return ans;
    }
};

执行操作使频率分数最大

滑动窗口统计化成中位数的最小步骤

//代码来自TsReaper
class Solution {
public:
    int maxFrequencyScore(vector<int>& nums, long long k) {
        int n = nums.size();
        nums.push_back(0);
        sort(nums.begin(), nums.end());

        // 预处理前缀和
        long long f[n + 1];
        f[0] = 0;
        for (int i = 1; i <= n; i++) f[i] = f[i - 1] + nums[i];

        // 求把 nums[L] 到 nums[R] 全部变成中位数的最小代价
        auto gao = [&](int L, int R) {
            // 找到中位数的下标
            int mid = (L + R) / 2;
            long long l = 1LL * nums[mid] * (mid - L + 1) - (f[mid] - f[L - 1]);
            long long r =  ((f[R] - f[mid]) - 1LL * nums[mid] * (R - mid));
            return l + r;
        };
        
        int ans = 0;
        // 滑动窗口
        //i右端点j左端点
        for (int i = 1, j = 1; i <= n; i++) {
            while (j <= i && gao(j, i) > k) j++;
            ans = max(ans, i - j + 1);
        }
        return ans;
    }
};

文章来源地址https://www.toymoban.com/news/detail-763323.html

到了这里,关于力扣376周赛的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】LRU缓存的简单模拟实现(leetcode力扣146LRU缓存)

    LRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法。 Cache的容量有限,因此当Cache的容量用完后,而又有新的内容需要添加进来时, 就需要挑选并舍弃原有的部分内容,从而腾出空间来放新内容。LRU Cache 的替换原则就是将最近最少使用的内容替换掉。

    2024年02月03日
    浏览(43)
  • 数据结构和算法的部分例题(力扣)

    1.1 合并一个数组的两个有序区间 2.1 反转单向链表 (方法1)构建一个新的链表,从就链表依次拿到每个节点,创建新的节点添加至新链表头部,完成后的新链表就是倒序的,简单,但是需要创建新的对象 (方法2)与方法1类似,构建新的链表,从头部移除节点,添加至新链

    2024年01月18日
    浏览(53)
  • 【数据结构与算法】力扣:对称二叉树

    给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root = [1,2,2,3,4,4,3] 输出:true 示例 2: 输入:root = [1,2,2,null,3,null,3] 输出:false 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/symmetric-tree 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请

    2024年02月13日
    浏览(34)
  • 【数据结构与算法】力扣:二叉树的层序遍历

    给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例1: 输入:root = [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]] 示例 2: 输入:root = [1] 输出:[[1]] 示例 3: 输入:root = [] 输出:[] 来源:力扣(LeetCode) 链接:https://leetcode.cn/p

    2024年02月13日
    浏览(44)
  • 摆动序列——力扣376

    题目描述 贪心

    2024年02月13日
    浏览(36)
  • 【算法与数据结构】474、LeetCode一和零

    所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。    思路分析 :本题要找strs数组的最大子集,这个子集最多含有 m m m 个0和 n n n 个1。本题也可以抽象成一个01背包的问题。其中,strs内的元素就是物品,而 m m m 和 n n n 就是背包的维度。 d p [

    2024年01月22日
    浏览(40)
  • 【算法与数据结构】62、LeetCode不同路径

    所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。    思路分析 :机器人只能向下或者向右移动,那么到达(i,j)位置的路径和(i-1,j)以及(i,j-1)有关。那么我们就得到的动态规划的表达式 d p [ i ] [ j ] = d p [ i − 1 ] [ j ] + d p [ i ] [ j − 1 ] dp[i][

    2024年01月18日
    浏览(65)
  • 【算法与数据结构】343、LeetCode整数拆分

    所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。    思路分析 :博主做这道题的时候一直在思考,如何找到 k k k 个正整数, k k k 究竟为多少合适。从数学的逻辑上来说,将 n n n 均分为 k k k 个数之后, k k k 个数的乘积为最大(类似于相同周长

    2024年01月17日
    浏览(51)
  • 数据结构算法leetcode刷题练习(1)

    给定一个三角形 triangle ,找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标

    2023年04月24日
    浏览(50)
  • 【算法与数据结构】494、LeetCode目标和

    所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。    思路分析 :本题和这道题【算法与数据结构】1049、LeetCode 最后一块石头的重量 II类似,同样可以转换成01背包问题。下面开始论述。假设添加正号的整数子集和为 p o s i t i v e positive p os i t

    2024年01月20日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包