第 122 场 LeetCode 双周赛题解

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;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖微信小程序端(十三)

地址簿相关功能 1.1 需求分析和设计1.1.1 产品原型1.1.2 接口设计1.1.3 表设计 1.2 代码实现1.2.1 Mapper层1.2.2 Service层1.2.3 Controller层 1.1 需求分析和设计 1.1.1 产品原型 地址簿&#xff0c;指的是消费者用户的地址信息&#xff0c;用户登录成功后可以维护自己的地…

C#调用C动态链接库

前言 已经没写过博客好久了&#xff0c;上一篇还是1年半前写的LTE Gold序列学习笔记&#xff0c;因为工作是做通信协议的&#xff0c;然后因为大学时没好好学习专业课&#xff0c;现在理论还不扎实&#xff0c;不敢瞎写&#xff1b; 因为工作原因&#xff0c;经常需要分析一些字…

如何使用xlwings库为Excel表格的单元格创建超链接----关于Python里xlwings库对Excel表格的操作(三十九)

这篇小笔记主要记录【如何使用xlwings库为Excel表格的单元格创建超链接】。前面的小笔记已整理成目录&#xff0c;可点链接去目录寻找所需更方便。【目录部分内容如下】【点击此处可进入目录】 &#xff08;1&#xff09;如何安装导入xlwings库&#xff1b; &#xff08;2&…

雷盛红酒LEESON分享葡萄酒也有“社会责任感”?

葡萄酒文化从来都不仅仅是感官体验&#xff0c;一瓶佳酿的背后不但蕴含着风土人情、历史传承和文化交流&#xff0c;更反映了时代社会的变迁以及体现的社会责任意识。 目前葡萄酒生产商追求酒瓶越来越轻就是葡萄酒市场上的一个趋势&#xff0c;因为任何一个行业都在追求与世界共…

坦克大战游戏代码

坦克大战游戏 主函数战场面板开始界面坦克父类敌方坦克我方坦克子弹爆炸效果数据存盘及恢复图片 主函数 package cn.wenxiao.release9;import java.awt.event.ActionEvent; import java.awt.event.ActionListener;import javax.swing.JFrame; import javax.swing.JMenu; impor…

套接字通信(附带单线程TCP套接字通信代码)

套接字-Socket 1. 概念 1.1 局域网和广域网 局域网&#xff08;LAN&#xff09;和广域网&#xff08;WAN&#xff09;是两种不同范围的计算机网络&#xff0c;它们用于连接多台计算机以实现数据共享和通信。 局域网&#xff08;LAN&#xff09;&#xff1a; 定义&#xff1…

【JavaEE】文件操作与IO

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

0121-1-计算机网络安全

计算机网络安全 1.Get 和 Post 的区别 结构&#xff1a;get 有请求体&#xff0c;post没有请求体 应用场景&#xff1a;get 用于获取数据&#xff0c;post用于提交数据&#xff1b; 缓存&#xff1a;get 的缓存保存在浏览器和web服务器日志中&#xff1b; 传输方式&#x…

typing python 类型标注学习笔记

在Python 3.5版本后引入的typing模块为Python的静态类型注解提供了支持。这个模块在增强代码可读性和维护性方面提供了帮助。 目录 简介为什么需要 Type hints typing常用类型typing初级语法typing基础语法默认参数及 Optional联合类型 (Union Type)类型别名 (Type Alias)子类型…

ESP32-HTTP_webServer库(Arduino)

ESP32-HTTP 介绍 ESP32是一款功能强大的微控制器&#xff0c;具有丰富的网络和通信功能。其中之一就是支持HTTP协议&#xff0c;这使得ESP32可以用于创建Web服务器。 HTTP是什么&#xff1f; HTTP&#xff08;Hyper Text Transfer Protocol&#xff09;&#xff0c;即超文本传…

[Error]连接iPhone调试时提示Failed to prepare the device for development.

环境&#xff1a; iPhone 7 Plus iOS 15.8 Xcode14.2 问题&#xff1a; 连接iPhone设备运行时&#xff0c;设备旁提示如下文案。 Failed to prepare the device for development. 这时强行点击运行按钮&#xff0c;会弹窗提示如下文案。 The run destination ZDMiPhone is n…

CTF show逆向5

1.查壳看看 没有壳&#xff0c;32位文件 同时注意到附件里的dll文件 2.放入IDA里看看 找到主函数 分别看看sub_4020B0 sub_4015BD 这两个函数 我发现一般看到MessageBoxA函数&#xff0c;都需要动态调试 动调看到 这里直接进行了返回,返回到了主函数 执行sub_4015BD函数 步…

力扣hot100 找到字符串中所有字母异位词 滑动窗口 双指针 一题双解

Problem: 438. 找到字符串中所有字母异位词 文章目录 思路滑动窗口 数组滑动窗口 双指针 思路 &#x1f469;‍&#x1f3eb; 参考题解 滑动窗口 数组 ⏰ 时间复杂度: O ( n ) O(n) O(n) &#x1f30e; 空间复杂度: O ( 1 ) O(1) O(1) class Solution { // 滑动窗口 …

【Gradle】Maven-Publishing

使用Java开发完成一个模块或者一个基础框架需要提供给团队项目使用&#xff0c;这个时候有两种方式可提供&#xff0c;一是提供源码&#xff0c;二是提供编译构建好的jar包供使用&#xff0c;这个时候需要讲构建好的包发布到公司的私服&#xff08;公司maven仓库&#xff09;&a…

分布式锁实现(mysql,以及redis)以及分布式的概念

道生一&#xff0c;一生二&#xff0c;二生三&#xff0c;三生万物 我旁边的一位老哥跟我说&#xff0c;你知道分布式是是用来干什么的嘛&#xff1f;一句话给我干懵了&#xff0c;我能隐含知道&#xff0c;大概是用来做分压处理的&#xff0c;并增加系统稳定性的。但是具体如…

C语言第四弹---printf和scanf详解

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 printf和scanf详解 1、printf和scanf详解介绍1.1 printf1.1.1 基本用法1.1.2 占位符1.1.3 占位符列举1.1.4 输出格式1.1.4.1 限定宽度1.1.4.2 总是显示正负号1.1…

第一篇【传奇开心果系列】WeUI开发原生微信小程序:汽车租赁小程序示例

传奇开心果博文系列目录 WeUI开发原生微信小程序示例系列博文目录博文目录一、项目目标二、编程思路三、初步实现汽车租赁微信小程序示例代码四、实现汽车租赁微信小程序的登录注册示例代码五、实现汽车租赁微信小程序的订单管理示例代码六、整合实现比较完整的汽车租赁微信小程…

css绘制下拉框头部三角(分实心/空心)

1:需求图: 手绘下拉框 带三角 2:网上查了一些例子,但都是实心的, 可参考,如图: (原链接: https://blog.csdn.net/qq_33463449/article/details/113375804) 3:简洁版的: a: 实心: <view class"angle"/>.angle{width:0;height:0;border-left: 10px solid t…

[晓理紫]每日论文分享(有中文摘要,源码或项目地址)--机器人相关、强化学习

专属领域论文订阅 VX 扫吗关注{晓理紫|小李子}&#xff0c;每日更新论文&#xff0c;如感兴趣&#xff0c;请转发给有需要的同学&#xff0c;谢谢支持 分类: 大语言模型LLM视觉模型VLM扩散模型视觉导航具身智能&#xff0c;机器人强化学习开放词汇&#xff0c;检测分割 [晓理紫…

K8s(七)四层代理Service

Service概述 Service在Kubernetes中提供了一种抽象的方式来公开应用程序的网络访问&#xff0c;并提供了负载均衡和服务发现等功能&#xff0c;使得应用程序在集群内外都能够可靠地进行访问。 每个Service都会自动关联一个对应的Endpoint。当创建一个Service时&#xff0c;Ku…