当前位置: 首页 > news >正文

36.贪心算法3

1.坏了的计算器(medium)

. - 力扣(LeetCode)

题目解析

算法原理

代码

class Solution {public int brokenCalc(int startValue, int target) {// 正难则反 + 贪⼼int ret = 0;while (target > startValue) {if (target % 2 == 0)target /= 2;elsetarget += 1;ret++;}return ret + startValue - target;}
}

2.合并区间(medium)

56. 合并区间 - 力扣(LeetCode)

题目解析

算法原理

 

 

代码

class Solution {public int[][] merge(int[][] intervals) {// 1. 按照左端点排序Arrays.sort(intervals, (v1, v2) -> {return v1[0] - v2[0];});// 2. 合并区间 - 求并集int left = intervals[0][0], right = intervals[0][1];List<int[]> ret = new ArrayList<>();for (int i = 1; i < intervals.length; i++) {int a = intervals[i][0], b = intervals[i][1];if (a <= right) // 有重叠部分{// 合并 - 求并集right = Math.max(right, b);} else // 不能合并{ret.add(new int[] { left, right });left = a;right = b;}}// 别忘了最后⼀个区间ret.add(new int[] { left, right });return ret.toArray(new int[0][]);}
}

3.无重叠区间(medium)

. - 力扣(LeetCode)

题目解析

算法原理

代码

class Solution {public int eraseOverlapIntervals(int[][] intervals) {// 1. 按照左端点排序Arrays.sort(intervals, (v1, v2) -> {return v1[0] - v2[0];});// 2. 移除区间int ret = 0;int left = intervals[0][0], right = intervals[0][1];for (int i = 1; i < intervals.length; i++) {int a = intervals[i][0], b = intervals[i][1];if (a < right) // 有重叠区间{ret++;right = Math.min(right, b); // 贪⼼:删除右端点较⼤的区间} else // 没有重叠区间{right = b;}}return ret;}
}

4.⽤最少数量的箭引爆⽓球(medium)

. - 力扣(LeetCode)

题目解析

算法原理

代码

class Solution {public int findMinArrowShots(int[][] points) {// 1. 按照左端点排序Arrays.sort(points, (v1, v2) -> {return v1[0] > v2[0] ? 1 : -1;});// 2. 求出互相重叠的区间的数量int right = points[0][1];int ret = 1;for (int i = 1; i < points.length; i++) {int a = points[i][0], b = points[i][1];if (a <= right) // 有重叠{right = Math.min(right, b);} else // 没有重叠{ret++;right = b;}}return ret;}
}

5.整数替换(medium)

397. 整数替换 - 力扣(LeetCode)

题目解析

算法原理

代码

class Solution {public int integerReplacement(int n) {int ret = 0;while (n > 1) {// 分类讨论if (n % 2 == 0) // 如果是偶数{n /= 2;ret++;} else {if (n == 3) {ret += 2;n = 1;} else if (n % 4 == 1) {n = n / 2;ret += 2;} else {n = n / 2 + 1;ret += 2;}}}return ret;}
}

6.俄罗斯套娃信封问题(hard)

. - 力扣(LeetCode)

题目解析

算法原理

 

代码

解法⼀:Java 算法代码:

class Solution {public int maxEnvelopes(int[][] e) {// 解法⼀:动态规划Arrays.sort(e, (v1, v2) -> {return v1[0] - v2[0];});int n = e.length;int[] dp = new int[n];int ret = 1;for (int i = 0; i < n; i++) {dp[i] = 1; // 初始化for (int j = 0; j < i; j++) {if (e[i][0] > e[j][0] && e[i][1] > e[j][1]) {dp[i] = Math.max(dp[i], dp[j] + 1);}}ret = Math.max(ret, dp[i]);}return ret;}
}

解法⼆(重写排序 + 贪⼼ + ⼆分):

当我们把整个信封按照「下⾯的规则」排序之后: i. 左端点不同的时候:按照「左端点从⼩到⼤」排序; ii. 左端点相同的时候:按照「右端点从⼤到⼩」排序 我们发现,问题就变成了仅考虑信封的「右端点」,完完全全的变成的「最⻓上升⼦序列」的模 型。那么我们就可以⽤「贪⼼ + ⼆分」优化我们的算法。 

class Solution {public int maxEnvelopes(int[][] e) {// 解法⼆:重写排序 + 贪⼼ + ⼆分Arrays.sort(e, (v1, v2) -> {return v1[0] != v2[0] ? v1[0] - v2[0] : v2[1] - v1[1];});// 贪⼼ + ⼆分ArrayList<Integer> ret = new ArrayList<>();ret.add(e[0][1]);for (int i = 1; i < e.length; i++) {int b = e[i][1];if (b > ret.get(ret.size() - 1)) {ret.add(b);} else {int left = 0, right = ret.size() - 1;while (left < right) {int mid = (left + right) / 2;if (ret.get(mid) >= b)right = mid;elseleft = mid + 1;}ret.set(left, b);}}return ret.size();}
}

7.可被三整除的最⼤和(medium)

. - 力扣(LeetCode)

题目解析

算法原理

 

 

代码

class Solution {public int maxSumDivThree(int[] nums) {int INF = 0x3f3f3f3f;int sum = 0, x1 = INF, x2 = INF, y1 = INF, y2 = INF;for (int x : nums) {sum += x;if (x % 3 == 1) {if (x < x1) {x2 = x1;x1 = x;} else if (x < x2) {x2 = x;}} else if (x % 3 == 2) {if (x < y1) {y2 = y1;y1 = x;} else if (x < y2) {y2 = x;}}}// 分类讨论if (sum % 3 == 0)return sum;else if (sum % 3 == 1)return Math.max(sum - x1, sum - y1 - y2);elsereturn Math.max(sum - y1, sum - x1 - x2);}
}

8.距离相等的条形码(medium)

. - 力扣(LeetCode)

题目解析

算法原理

代码

class Solution {public int[] rearrangeBarcodes(int[] b) {Map<Integer, Integer> hash = new HashMap<>(); // 统计每个数出现了多少次int maxVal = 0, maxCount = 0;for (int x : b) {hash.put(x, hash.getOrDefault(x, 0) + 1);if (maxCount < hash.get(x)) {maxVal = x;maxCount = hash.get(x);}}int n = b.length;int[] ret = new int[n];int index = 0;// 先处理出现次数最多的那个数for (int i = 0; i < maxCount; i++) {ret[index] = maxVal;index += 2;}hash.remove(maxVal);for (int x : hash.keySet()) {for (int i = 0; i < hash.get(x); i++) {if (index >= n)index = 1;ret[index] = x;index += 2;}}return ret;}
}

9.矩阵中的最长递增路径

767. 重构字符串 - 力扣(LeetCode)

题目解析

算法原理

代码

class Solution {public String reorganizeString(String s) {int[] hash = new int[26];char maxChar = ' ';int maxCount = 0;for (int i = 0; i < s.length(); i++) {char ch = s.charAt(i);if (maxCount < ++hash[ch - 'a']) {maxChar = ch;maxCount = hash[ch - 'a'];}}int n = s.length();// 先判断if (maxCount > (n + 1) / 2)return "";char[] ret = new char[n];int index = 0;// 先处理次数最多的字符for (int i = 0; i < maxCount; i++) {ret[index] = maxChar;index += 2;}hash[maxChar - 'a'] = 0;for (int i = 0; i < 26; i++) {for (int j = 0; j < hash[i]; j++) {if (index >= n)index = 1;ret[index] = (char) (i + 'a');index += 2;}}return new String(ret);}
}

相关文章:

36.贪心算法3

1.坏了的计算器&#xff08;medium&#xff09; . - 力扣&#xff08;LeetCode&#xff09; 题目解析 算法原理 代码 class Solution {public int brokenCalc(int startValue, int target) {// 正难则反 贪⼼int ret 0;while (target > startValue) {if (target % 2 0…...

htop(1) command

文章目录 1.简介2.格式3.选项4.交互式命令5.示例6.小结参考文献 1.简介 htop 是一种交互式、跨平台的基于 ncurses 的进程查看器。 类似于 top&#xff0c;但 htop 允许您垂直和水平滚动&#xff0c;并使用指向设备(鼠标)进行交互。您可以观察系统上运行的所有进程&#xff0…...

ODrive学习——添加485编码器支持

系列文章目录 文章目录 系列文章目录前言一、端口处理二、在Encoder中引入新的类型1.增加485类型2.增加串口的初始化操作3.数据处理 总结 前言 尝试在ODrive中添加485型的编码器的支持 一、端口处理 计划使用PA2及PA3作为485通信的端口。这样首先要把外部温度传感器的I/O口给…...

在OSX上: 使用brew安装nginx 后,在通过编译安装第三方模块

1. 下载nginx安装包nginx: download 2. mac环境编译源码需要安装pcre、openssl等第三方依赖&#xff0c;可参考在OSX上: 使用brew安装nginx 后&#xff0c;在通过编译安装第三方模块 - ZhYQ_note - 博客园 3. nginx可支持的配置参考Building nginx from Sources 4. 执行 ./…...

C++初阶学习第六弹------标准库中的string类

目录 一.标准库中的string类 二.string的常用接口函数 2.1string类对象的构造 2.2 string的容量操作 2.3 string类的访问与遍历 2.4 string类对象的修改 2.5 string类常用的非成员函数 三、总结 一.标准库中的string类 可以简单理解成把string类理解为变长的字符数组&#x…...

Linux基础-Makefile的编写、以及编写第一个Linux程序:进度条(模拟在 方便下载的同时,更新图形化界面)

目录 一、Linux项目自动化构建工具-make/Makefile ​编辑 背景&#xff1a; makefile小技巧&#xff1a; 二、Linux第一个小程序&#xff0d;进度条 先导&#xff1a; 1.如何利用/r,fflush(stdout)来实现我们想要的效果&#xff1b; 2.写一个倒计时&#xff1a; 进度条…...

华为云DevSecOps和DevOps

目录 1.华为云DevSecOps和DevOps 1.1 DevSecOps 1.1.1 核心功能 1.1.2 优势 1.2 DevOps 1.2.1 核心功能 1.2.2 优势 1.3 DevOps和DevSecOps的区别 1.3.1 安全性集成 1.3.2 自动化的安全工具 1.3.3 团队协作 1.3.4 质量与合规性 1.3.5 成本与风险管理 1.3.5 总结 …...

RESTful API设计中的GET与POST:何时及为何成为首选?

RESTful API设计中的GET与POST&#xff1a;何时及为何成为首选&#xff1f; 在RESTful API的设计过程中&#xff0c;HTTP方法&#xff08;GET、POST、PUT、DELETE等&#xff09;作为资源的操作标识&#xff0c;扮演着至关重要的角色。然而&#xff0c;在实际开发中&#xff0c…...

秋招自我介绍

1min 尊敬的面试官您好&#xff0c;感谢您百忙之中参加我的面试。我是来自北京大学的王峰。 在实习经历方面&#xff0c;我曾在美团和小米公司实习。在美团主要负责核身、质检、词云项目。 在核身项目中&#xff0c;完整的经历从0-1的项目上线过程 在质检项目中&#xff0c;进…...

html加载页面

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>算数模一体化</title> </head><b…...

【数据可视化】Arcgis api4.x 热力图、时间动态热力图、timeSlider时间滑块控件应用 (超详细、附免费教学数据、收藏!)

1.效果 目录 1.效果 2.安装配置 3.热力图 4.TimeSlider滑块应用 4.1 时间滑块控件 4.2 添加控件 5.时间动态热力图 2.安装配置 这里不教大家如何在前端框架使用arcgis api。不过npm安装、css如何引入、教学数据存放与图层加载的教程&#xff0c;可以浏览我之前发的一篇文…...

WEB攻防-JavaWweb项目JWT身份攻击组件安全访问控制

知识点&#xff1a; 1、JavaWeb常见安全及代码逻辑&#xff1b; 2、目录遍历&身份验证&逻辑&JWT&#xff1b; 3、访问控制&安全组件&越权&三方组件&#xff1b; 演示案例&#xff1a; JavaWeb-WebGoat8靶场搭建使用 安全问题-目录遍历&身份认…...

【C++算法】模拟算法

替换所有的问号 题目链接 替换所有的问号https://leetcode.cn/problems/replace-all-s-to-avoid-consecutive-repeating-characters/description/ 算法原理 代码步骤 class Solution { public:string modifyString(string s) {int n s.size();for(int i 0; i < n; i){…...

模版进阶(template)

1.非类型模版参数 模版参数分类类型形参与非类型形参。 ① 类型形参&#xff1a;出现在在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。 ② 非类型形参&#xff0c;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将该参数当…...

vue2与vue3的区别

1.v-if与v-for的优先级不同 2.vue2中存在数据更新以后视频不更新的问题&#xff0c;故存在$set来解决这一问题&#xff0c;而vue3中数据双向绑定不存在数据更新视图不更新的问题&#xff0c;所以也就没有this.$set...

借助大模型将文档转换为视频

利用传统手段将文档内容转换为视频&#xff0c;比如根据文档内容录制一个视频&#xff0c;不仅需要投入大量的时间和精力&#xff0c;而且往往需要具备专业的视频编辑技能。使用大模型技术可以更加有效且智能化地解决上述问题。本实践方案旨在依托大语言模型&#xff08;Large …...

UE5安卓项目打包安装

Android studio安装 参考&#xff1a;https://docs.unrealengine.com/5.2/zh-CN/how-to-set-up-android-sdk-and-ndk-for-your-unreal-engine-development-environment/ 打开android studio的官网&#xff1a;Download Android Studio & App Tools - Android Developers …...

MSF的使用学习

一、更新MSF apt update # 更新安装包信息&#xff1b;只检查&#xff0c;不更新&#xff08;已安装的软件包是否有可用的更新&#xff0c;给出汇总报告&#xff09; apt upgrade # 更新已安装的软件包&#xff0c;不删除旧包&#xff1b; apt full-upgrade # 升级包&#x…...

C++ —— 关于vector

目录 链接 1. vector的定义 2. vector的构造 3. vector 的遍历 4. vector 的扩容机制 5. vector 的空间接口 5.1 resize 接口 5.2 push_back 5.3 insert 5.4 erase 5.5 流插入与流提取 vector 并不支持流插入与流提取&#xff0c;但是可以自己设计&#xff0c;更…...

设计模式——对象池模式

对象池模式 1. 概述2. 适用场景3. 原理4. 优点5. 缺点 示例代码示例代码使用示例 Java 标准库中的例子Apache Commons Pool 示例 1. 概述 对象池模式&#xff08;Object Pool Pattern&#xff09; 是一种用于管理和复用一组预先创建的对象的设计模式。它的主要目的是为了提高性…...

高性能Windows流媒体服务器部署:5大核心技术与3种实战架构深度解析

高性能Windows流媒体服务器部署&#xff1a;5大核心技术与3种实战架构深度解析 【免费下载链接】srs-windows 项目地址: https://gitcode.com/gh_mirrors/sr/srs-windows 在Windows平台上构建专业级流媒体服务系统&#xff0c;需要综合考虑协议兼容性、性能优化和部署架…...

如何从零构建智能FOC轮腿机器人:完整开源硬件系统终极指南

如何从零构建智能FOC轮腿机器人&#xff1a;完整开源硬件系统终极指南 【免费下载链接】foc-wheel-legged-robot Open source materials for a novel structured legged robot, including mechanical design, electronic design, algorithm simulation, and software developme…...

广州因特智能:AI视觉软硬结合,打破半导体检测装备“卡脖子”困境

【导语&#xff1a;广州因特智能科技孵化于西安电子科技大学广州研究院&#xff0c;专注用AI视觉技术解决工业场景的“卡脖子”检测难题&#xff0c;为半导体、光通信、新能源三大领域提供高端检测装备。】校地合作孵化&#xff0c;构建完整能力体系广州因特智能科技由西安电子…...

长期使用Token Plan套餐在项目开发中的成本观察

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 长期使用Token Plan套餐在项目开发中的成本观察 在AI驱动的项目开发中&#xff0c;成本控制与预算管理是团队负责人必须面对的现实…...

百度文心一言开发者如何通过Taotoken低成本接入多模型API

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 百度文心一言开发者如何通过Taotoken低成本接入多模型API 对于已经熟悉并正在使用百度文心一言等国产大模型API的开发者而言&#…...

基于随机森林的低成本传感器机器学习校准实践指南

1. 项目概述&#xff1a;当低成本传感器遇上机器学习校准在物联网和智能感知系统铺天盖地的今天&#xff0c;低成本传感器几乎无处不在。从监测办公室的空气质量&#xff0c;到追踪城市街道的噪音污染&#xff0c;再到农业大棚里的温湿度控制&#xff0c;这些价格亲民的“小眼睛…...

免费抓包工具选型指南:Wireshark、Fiddler、mitmproxy、Charles实战对比

1. 抓包工具不是“黑科技”&#xff0c;而是网络世界的显微镜很多人第一次听说“抓包”&#xff0c;脑子里立刻浮现出黑客电影里满屏滚动的绿色代码、键盘敲得噼啪作响、三秒破解银行防火墙的画面。其实完全不是这样——抓包&#xff08;Packet Capture&#xff09;本质上就是把…...

uWSGI目录穿越漏洞CVE-2018-7490深度利用与防御实战

1. 这不是“读文件”那么简单&#xff1a;uWSGI目录穿越在真实攻防链中的定位与误判代价你刚在Vulfocus靶场里跑通了CVE-2018-7490的PoC&#xff0c;用curl "http://target:8080/?p../../../../etc/passwd"成功读出了root:x:0:0:root:/root:/bin/bash&#xff0c;截…...

PrivacyGuard实战:基于实证差分隐私的机器学习模型隐私审计框架

1. 项目概述与核心价值在过去的几年里&#xff0c;我亲眼见证了机器学习模型从实验室走向银行、医疗、社交网络等各个敏感领域的全过程。模型性能的每一次飞跃都令人兴奋&#xff0c;但随之而来的隐私泄露事件也一次次为我们敲响警钟。一个在医疗数据上训练出的诊断模型&#x…...

通过TaotokenCLI工具一键配置开发环境接入参数

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过Taotoken CLI工具一键配置开发环境接入参数 对于需要接入多个大模型服务的开发者而言&#xff0c;手动配置每个项目的API密钥、…...