第 122 场 LeetCode 双周赛题解

news2024/10/7 12:19:24

A 将数组分成最小总代价的子数组 I

在这里插入图片描述

枚举:枚举后两个子数组的起始下标

class Solution {
public:
    int minimumCost(vector<int> &nums) {
        int n = nums.size();
        int res = INT32_MAX;
        for (int i = 1; i < n; i++)
            for (int j = i + 1; j < n; j++)
                res = min(res, nums[0] + nums[i] + nums[j]);
        return res;
    }
};

B 判断一个数组是否可以变为有序

在这里插入图片描述

模拟:模拟冒泡排序的过程,若相邻元素大小关系需要交换位置,但其二进制下数位为 1 的数目不同,则返回false,若完成排序返回true

class Solution {
public:
    bool canSortArray(vector<int> &nums) {
        int n = nums.size();
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n - 1; j++) {
                if (nums[j] <= nums[j + 1])
                    continue;
                if (popcnt(nums[j]) != popcnt(nums[j + 1]))
                    return false;
                swap(nums[j], nums[j + 1]);
            }
        }
        return true;
    }

    int popcnt(int x) {//x的二进制下数位为1的数目 
        int res = 0;
        for (int i = 0; i < 9; i++)
            if (x >> i & 1)
                res++;
        return res;
    }
};

C 通过操作使数组长度最小在这里插入图片描述

在这里插入图片描述

脑筋急转弯:设 n u m s nums nums 中最小元素为 x,1)若存在 y 使得 y%x ≠ \ne = 0 ,则可以通过y%x将其余所有元素删除,最终答案为 1 ;2)否则用 x 可以将所有其他元素删除,然后最后只剩所有的 x ,此时最后数组的最小长度为 ⌈ c o u n t ( x ) 2 ⌉ \left \lceil \frac {count(x)}{2} \right \rceil 2count(x)

class Solution {
public:
    int minimumArrayLength(vector<int> &nums) {
        sort(nums.begin(), nums.end());
        int n = nums.size();
        for (int i = 1; i < n; i++)
            if (nums[i] % nums[0] != 0)
                return 1;
        return (count(nums.begin(), nums.end(), nums[0]) + 1) / 2;
    }
};

D 将数组分成最小总代价的子数组 II

在这里插入图片描述
滑动窗口+堆+哈希表:枚举第 k k k 个子数组的开始下标 i i i ,此时 k k k 个子数组的最小代价为 n u m s [ 0 ] + n u m s [ i ] + s nums[0]+nums[i]+s nums[0]+nums[i]+s s s s n u m s [ i − d i s t , i − 1 ] nums[i-dist,i-1] nums[idist,i1] 中最小的 k − 2 k-2 k2 个元素之和,通过枚举 i i i ,然后通过两个堆和两个哈希表维护 s s s

class Solution {
public:
    using ll = long long;

    long long minimumCost(vector<int> &nums, int k, int dist) {
        int n = nums.size();
        priority_queue<int, vector<int>, greater<int>> out;//最大堆,在nums[i-dist,i-1]范围内,不在最小的k-2个之内
        priority_queue<int> sel;//最小堆,在nums[i-dist,i-1]范围内,且在最小的k-2个之内
        unordered_map<int, int> cs, co;//cs: sel中对应元素的数目,co:out中对应元素的数目
        ll s = 0;
        for (int i = 1; i <= k - 2; i++) {//初始化sel,cs
            s += nums[i];
            sel.push(nums[i]);
            cs[nums[i]]++;
        }
        ll res = INT64_MAX;
        for (int i = k - 1; i < n; i++) {//枚举i
            if (int pre = i - dist - 1;pre >= 1) {//滑动窗口右移,即nums[pre]移出窗口
                while (cs[sel.top()] == 0)//更新sel
                    sel.pop();
                if (nums[pre] <= sel.top()) {//需要更新sel和out
                    cs[nums[pre]]--;
                    s -= nums[pre];
                    while (co[out.top()] == 0)//更新out
                        out.pop();
                    s += out.top();
                    sel.push(out.top());
                    cs[out.top()]++;
                    co[out.top()]--;
                    out.pop();
                } else//只需更新co
                    co[nums[pre]]--;

            }
            res = min(res, nums[0] + s + nums[i]);
            out.push(nums[i]);
            co[nums[i]]++;
            while (cs[sel.top()] == 0)
                sel.pop();
            while (co[out.top()] == 0)
                out.pop();
            if (!out.empty() && sel.top() > out.top()) {//需要更新sel和out
                int mx = sel.top();
                int mn = out.top();
                cs[mx]--;
                cs[mn]++;
                co[mn]--;
                co[mx]++;
                s -= mx;
                s += mn;
                sel.pop();
                sel.push(mn);
                out.pop();
                out.push(mx);
            }
        }
        return res;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1400135.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI日报:扎克伯格瞄准AGI通用人工智能

文章目录 Meta瞄准通用人工智能领域Meta的目标Meta的产品 FAIR移动和装载H100扎克伯格对人工智能竞争对手的真实动机持怀疑态度Meta抛弃了元宇宙吗&#xff1f; Meta瞄准通用人工智能领域 Meta首席执行官马克扎克伯格&#xff08;Mark Zuckerberg&#xff09;在一份可能改变全…

数字式温度计的设计

根据前期的设计要求&#xff0c;我们需要设计一个数字式温度测量计&#xff0c;能够实现将温度信号实时转换成实际方便查看的形式输出。 目录 题目要求 设计思路 电路模块 温度传感器电路 A/D转换电路 数码管显示电路 仿真显示 题目要求 以下为题目的设计参考电路&…

天龙八部场景编辑器(源码+软件+教程)

天龙八部场景编辑器&#xff0c;里面包括《源码》&#xff0c;《软件》&#xff0c;《教程》&#xff0c;喜欢研究天龙八部的可以下载看看。 天龙八部场景编辑器&#xff08;源码软件教程&#xff09; 下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1GWXErav0…

论文阅读_CogTree_推理的认知树

英文名称: From Complex to Simple: Unraveling the Cognitive Tree for Reasoning with Small Language Models中文名称: 从复杂到简单&#xff1a;揭示小型语言模型推理的认知树链接: http://arxiv.org/abs/2311.06754v1代码: https://github.com/alibaba/EasyNLP作者: Junbi…

PLC物联网网关BL104实现PLC协议转MQTT、OPC UA、Modbus TCP

随着物联网技术的迅猛发展&#xff0c;人们深刻认识到在智能化生产和生活中&#xff0c;实时、可靠、安全的数据传输至关重要。在此背景下&#xff0c;高性能的物联网数据传输解决方案——协议转换网关应运而生&#xff0c;广泛应用于工业自动化和数字化工厂应用环境中。 无缝衔…

【leetcode题解C++】160.相交链表 and 142.环形链表II

​160.相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 示例 1&#xff1…

使用Ultimate-SD-Upscale进行图片高清放大

之前我们介绍过StableSR进行图片高清放大&#xff0c;如果调的参数过大&#xff0c;就会出现内存不足的情况&#xff0c;今天我们介绍另外一个进行图片高清放大的神器Ultimate-SD-Upscale&#xff0c;他可以使用较小的内存对图像进行高清放大。下面我们来看看如何使用进行操作。…

web漏洞总结大全(基础)

前言 本文章是和cike_y师傅一起写的&#xff0c;cike_y博客&#xff1a;https://blog.csdn.net/weixin_53912233?typeblog 也欢迎大家对本文章进行补充和指正&#xff0c;共同维护这个项目&#xff0c;本文的github项目地址&#xff1a; https://github.com/baimao-box/Sum…

力扣343. 整数拆分(动态规划)

Problem: 343. 整数拆分 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 该题目可以抽象成动态规划中的爬楼梯模型&#xff0c;将整数的拆分类比为上台阶&#xff1a; 1.每个阶段可以从整数中划分出1、2、…k的一个整数 2.int dp[n 1] dp[i]表示为i的整数划分的最大…

GEE:MCD12Q1土地利用分类产品下载导出制图

导入矢量文件和导出可以看以外博文 var roi ee.FeatureCollection(projects/a-flyllf0313/assets/yidaiyilu); Map.centerObject(roi,5.5)var dataset ee.ImageCollection(MODIS/061/MCD12Q1); var igbpLandCover dataset.select(LC_Type1).mosaic().clip(roi); var igbpLan…

力扣:474. 一和零(动态规划)(01背包)

题目&#xff1a; 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度&#xff0c;该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素&#xff0c;集合 x 是集合 y 的 子集 。 示例 1&#xff1a; 输入&#…

【LeetCode每日一题】2788. 按分隔符拆分字符串

2024-1-20 文章目录 [2788. 按分隔符拆分字符串](https://leetcode.cn/problems/split-strings-by-separator/)思路&#xff1a; 2788. 按分隔符拆分字符串 思路&#xff1a; 对于每个单词&#xff0c;使用一个可变字符串 StringBuilder 来构建拆分后的单词。初始时&#xff0…

高性能前端UI库 SolidJS | 超棒 NPM 库

SolidJS是一个声明式的、高效的、编译时优化的JavaScript库&#xff0c;用于构建用户界面。它的核心特点是让你能够编写的代码既接近原生JavaScript&#xff0c;又能够享受到现代响应式框架提供的便利。 SolidJS的设计哲学强调了性能与简洁性。它不使用虚拟DOM&#xff08;Vir…

VScode新增设备实现无感接入(不需要输入密码)

VScode远程开发接入设备&#xff0c;默认是需要输入密码的&#xff0c;但是日常开发中刷新就需要重新输入密码&#xff0c;很烦人。配置ssh的RSA密钥后会&#xff0c;就可以直接系统级别验证接入&#xff0c;对开发人员来说验证步骤就透明了&#xff0c;实现无感接入&#xff0…

企业级存储使用的SSD磁盘的健康度问题探讨

写在前面&#xff0c;我的主要工作是销售企业级存储系统的备品备件和提供一些额外的增值服务。谈到销售备件&#xff0c;很重要的就是备件质量了。现在SSD磁盘使用越来越广泛&#xff0c;对于SSD磁盘的健康度就是甲方爷爷们非常关心的一个问题。本文就是想梳理一下企业级SSD固态…

再论 如何通过一个项目征服Java

前面说过&#xff0c;我准备用几个月的时间&#xff0c;将Java体系认真的梳理一遍&#xff0c;不一定做的很好&#xff0c;但是每次都努力去做。 为什么我觉得需要加紧做这个呢&#xff1f;Java早已经不是高大上的稀世珍品了&#xff0c;程序员也不再是高科技工作者&#xff0…

操作系统-操作系统引导(磁盘 操作系统引导过程)

文章目录 总览一个刚买来的磁盘&#xff08;硬盘&#xff09;往磁盘安装操作系统后操作系统引导过程例&#xff1a;windows操作系统的初始化程序 总览 一个刚买来的磁盘&#xff08;硬盘&#xff09; 此时空空如也 往磁盘安装操作系统后 操作系统在C盘 主引导记录不属于某…

JVM工作原理与实战(二十二):方法区的垃圾回收

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、Java的内存管理和自动垃圾回收 二、方法区的垃圾回收 1.回收条件 2.手动触发垃圾回收 3.方法区的垃圾回收案例 总结 前言 JVM作为Java程序的运行环境&#xff0c;其负责解释和…

beego项目部署与热更新

1.开发自己的第一个项目 这里我引用的是在线聊天室&#xff0c;参考源码是https://github.com/beego/samples/tree/master/WebIM 在源码的基础上重新开发&#xff0c;整理项目发布到了liu289747235/WebIM 推荐下载源码&#xff1a;https://gitee.com/myselfyou/web-im 在线…

如何卸载旧版docker

环境&#xff1a; Docker1.13 centos7.6 问题描述&#xff1a; 如何卸载旧版docker 解决方案&#xff1a; 1.停止Docker服务。使用以下命令停止Docker服务&#xff1a; sudo service docker stop2.卸载Docker软件包。根据您的Linux发行版&#xff0c;使用适当的包管理器来…