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.坏了的计算器(medium) . - 力扣(LeetCode) 题目解析 算法原理 代码 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,但 htop 允许您垂直和水平滚动,并使用指向设备(鼠标)进行交互。您可以观察系统上运行的所有进程࿰…...
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等第三方依赖,可参考在OSX上: 使用brew安装nginx 后,在通过编译安装第三方模块 - 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 编辑 背景: makefile小技巧: 二、Linux第一个小程序-进度条 先导: 1.如何利用/r,fflush(stdout)来实现我们想要的效果; 2.写一个倒计时: 进度条…...

华为云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:何时及为何成为首选? 在RESTful API的设计过程中,HTTP方法(GET、POST、PUT、DELETE等)作为资源的操作标识,扮演着至关重要的角色。然而,在实际开发中,…...
秋招自我介绍
1min 尊敬的面试官您好,感谢您百忙之中参加我的面试。我是来自北京大学的王峰。 在实习经历方面,我曾在美团和小米公司实习。在美团主要负责核身、质检、词云项目。 在核身项目中,完整的经历从0-1的项目上线过程 在质检项目中,进…...

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如何引入、教学数据存放与图层加载的教程,可以浏览我之前发的一篇文…...

WEB攻防-JavaWweb项目JWT身份攻击组件安全访问控制
知识点: 1、JavaWeb常见安全及代码逻辑; 2、目录遍历&身份验证&逻辑&JWT; 3、访问控制&安全组件&越权&三方组件; 演示案例: 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.非类型模版参数 模版参数分类类型形参与非类型形参。 ① 类型形参:出现在在模板参数列表中,跟在class或者typename之类的参数类型名称。 ② 非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当…...

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

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

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

MSF的使用学习
一、更新MSF apt update # 更新安装包信息;只检查,不更新(已安装的软件包是否有可用的更新,给出汇总报告) apt upgrade # 更新已安装的软件包,不删除旧包; 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 并不支持流插入与流提取,但是可以自己设计,更…...
设计模式——对象池模式
对象池模式 1. 概述2. 适用场景3. 原理4. 优点5. 缺点 示例代码示例代码使用示例 Java 标准库中的例子Apache Commons Pool 示例 1. 概述 对象池模式(Object Pool Pattern) 是一种用于管理和复用一组预先创建的对象的设计模式。它的主要目的是为了提高性…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...