35.贪心算法2

news/2024/9/20 14:11:49/

1.按身高排序(easy)

2418. 按身高排序 - 力扣(LeetCode)

题目解析

算法原理

代码

class Solution {public String[] sortPeople(String[] names, int[] heights) {// 1. 创建⼀个下标数组int n = names.length;Integer[] index = new Integer[n];for (int i = 0; i < n; i++)index[i] = i;// 2. 对下标数组排序Arrays.sort(index, (i, j) -> {return heights[j] - heights[i];});// 3. 提取结果String[] ret = new String[n];for (int i = 0; i < n; i++) {ret[i] = names[index[i]];}return ret;}
}

2.优势洗牌(田忌赛马)

870. 优势洗牌 - 力扣(LeetCode)

题目解析

算法原理

代码

class Solution {public int[] advantageCount(int[] nums1, int[] nums2) {int n = nums1.length;// 1. 排序Arrays.sort(nums1);Integer[] index2 = new Integer[n];for (int i = 0; i < n; i++)index2[i] = i;Arrays.sort(index2, (i, j) -> {return nums2[i] - nums2[j];});// 2. ⽥忌赛⻢int[] ret = new int[n];int left = 0, right = n - 1;for (int x : nums1) {if (x > nums2[index2[left]]) {ret[index2[left++]] = x;} else {ret[index2[right--]] = x;}}return ret;}
}

3.最长回文串(easy)

. - 力扣(LeetCode)

题目解析

算法原理

代码

class Solution {public int longestPalindrome(String s) {// 1. 计数 - ⽤数组模拟哈希表int[] hash = new int[127];for (int i = 0; i < s.length(); i++) {hash[s.charAt(i)]++;}// 2. 统计结果int ret = 0;for (int x : hash) {ret += x / 2 * 2;}return ret < s.length() ? ret + 1 : ret;}
}

4.增减字符串匹配(easy)

942. 增减字符串匹配 - 力扣(LeetCode)

题目解析

算法原理

代码

class Solution {public int[] diStringMatch(String s) {int n = s.length();int left = 0, right = n; // ⽤ left,right 标记最⼩值和最⼤值int[] ret = new int[n + 1];for (int i = 0; i < n; i++) {if (s.charAt(i) == 'I') {ret[i] = left++;} else {ret[i] = right--;}}ret[n] = left; // 把最后⼀个数放进去return ret;}
}

5.分发饼干(easy)

. - 力扣(LeetCode)

题目解析

算法原理

代码

class Solution {public int findContentChildren(int[] g, int[] s) {// 排序Arrays.sort(g);Arrays.sort(s);// 利⽤双指针找答案int ret = 0, m = g.length, n = s.length;for (int i = 0, j = 0; i < m && j < n; i++, j++) {while (j < n && s[j] < g[i])j++; // 找饼⼲if (j < n)ret++;}return ret;}
}

6.最优除法(medium)

553. 最优除法 - 力扣(LeetCode)

题目解析

算法原理

代码

class Solution {public String optimalDivision(int[] nums) {int n = nums.length;StringBuffer ret = new StringBuffer();// 先处理两个边界情况if (n == 1) {return ret.append(nums[0]).toString();}if (n == 2) {return ret.append(nums[0]).append("/").append(nums[1]).toString();}ret.append(nums[0]).append("/(").append(nums[1]);for (int i = 2; i < n; i++) {ret.append("/").append(nums[i]);}ret.append(")");return ret.toString();}
}

7.跳跃游戏 Ⅱ(medium)

45. 跳跃游戏 II - 力扣(LeetCode)

题目解析

算法原理

代码

class Solution {public int jump(int[] nums) {int left = 0, right = 0, ret = 0, maxPos = 0, n = nums.length;while (left <= right) // 以防跳不到 n - 1 的位置{if (maxPos >= n - 1) // 判断是否已经能跳到最后⼀个位置{return ret;}for (int i = left; i <= right; i++) {// 更新下⼀层的最右端点maxPos = Math.max(maxPos, nums[i] + i);}left = right + 1;right = maxPos;ret++;}return -1;}
}

8.跳跃游戏(medium)

. - 力扣(LeetCode)

题目解析

算法原理

代码

class Solution {public boolean canJump(int[] nums) {int left = 0, right = 0, maxPos = 0, n = nums.length;while (left <= right) {if (maxPos >= n - 1) {return true;}for (int i = left; i <= right; i++) {maxPos = Math.max(maxPos, nums[i] + i);}left = right + 1;right = maxPos;}return false;}
}

9.加油站(medium)

. - 力扣(LeetCode)

题目解析

算法原理

 

代码

class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {int n = gas.length;for (int i = 0; i < n; i++) // 依次枚举所有的起点{int rest = 0; // 统计净收益int step = 0;for (; step < n; step++) // 枚举向后⾛的步数{int index = (i + step) % n; // ⾛ step 步之后的下标rest = rest + gas[index] - cost[index];if (rest < 0) {break;}}if (rest >= 0) {return i;}i = i + step; // 优化}return -1;}
}

10.单调递增的数字(medium)

. - 力扣(LeetCode)

题目解析

算法原理

代码

class Solution {public int monotoneIncreasingDigits(int n) {// 把数字转化成字符串char[] s = Integer.toString(n).toCharArray();int i = 0, m = s.length;// 找第⼀个递减的位置while (i + 1 < m && s[i] <= s[i + 1])i++;if (i == m - 1)return n; // 特判⼀下特殊情况// 回退while (i - 1 >= 0 && s[i] == s[i - 1])i--;s[i]--;for (int j = i + 1; j < m; j++)s[j] = '9';return Integer.parseInt(new String(s));}
}


http://www.ppmy.cn/news/1528017.html

相关文章

【Elasticsearch】-图片向量化存储

需要结合深度学习模型 1、pom依赖 注意结尾的webp-imageio 包&#xff0c;用于解决ImageIO.read读取部分图片返回为null的问题 <dependency><groupId>org.openpnp</groupId><artifactId>opencv</artifactId><version>4.7.0-0</versio…

【网络安全】-ssrf服务器请求伪造攻击-burp

SSRF攻击服务器请求伪造攻击 CSRF攻击跨站请求伪造攻击也称客户端请求伪造攻击 两种攻击最主要的区别是一个在服务器&#xff0c;一个在客户端。 文章目录 前言 什么是SSRF攻击? 1.分类&#xff1a; 针对服务器的 SSRF 攻击&#xff1a; 针对后端系统的SSRF攻击&#xff1a; …

深入理解 Python 中的浅拷贝与深拷贝:案例解析与潜在陷阱20240919

深入理解 Python 中的浅拷贝与深拷贝&#xff1a;案例解析与潜在陷阱 引言 在 Python 编程中&#xff0c;浅拷贝&#xff08;shallow copy&#xff09;和 深拷贝&#xff08;deep copy&#xff09;是两个容易混淆但又非常重要的概念。尤其是在处理嵌套数据结构时&#xff0c;…

Qt 模型视图(一):概述

文章目录 Qt 模型视图(一):概述1、模型/视图结构基本原理2、模型3、视图4、代理5、简单实例 Qt 模型视图(一):概述 ​ 模型/视图结构是一种将数据存储和界面展示分离的编程方法。模型存储数据&#xff0c;视图组件显示模型中的数据&#xff0c;在视图组件里修改的数据会被自动…

Unity3D 小案例 像素贪吃蛇 02 蛇的觅食

Unity3D 小案例 像素贪吃蛇 第二期 蛇的觅食 像素贪吃蛇 食物生成 在场景中创建一个 2D 正方形&#xff0c;调整颜色&#xff0c;添加 Tag 并修改为 Food。 然后拖拽到 Assets 文件夹中变成预制体。 创建食物管理器 FoodManager.cs&#xff0c;添加单例&#xff0c;可以设置…

计算机网络 --- Socket 编程

序言 在上一篇文章中&#xff0c;我们介绍了 协议&#xff0c;协议就是一种约定&#xff0c;规范了双方通信需要遵循的规则、格式和流程&#xff0c;以确保信息能够被准确地传递、接收和理解。  在这篇文章中我们将介绍怎么进行跨网络数据传输&#xff0c;在这一过程中相信大家…

AI对汽车行业的冲击和比亚迪新能源汽车市场占比

人工智能&#xff08;AI&#xff09;对汽车行业的冲击正在迅速改变该行业的面貌&#xff0c;从智能驾驶到生产自动化&#xff0c;再到个性化的消费者体验&#xff0c;AI带来的技术革新在各个层面影响着汽车产业。与此同时&#xff0c;新能源汽车市场&#xff0c;特别是以比亚迪…

Apollo自动驾驶项目(二:cyber框架分析)

Apollo 的 Cyber 框架 是一个基于消息传递的中间件&#xff0c;用于处理模块之间的通信和数据共享&#xff0c;类似于 ROS&#xff08;Robot Operating System&#xff09;。它是 Apollo 系统的核心框架之一&#xff0c;负责协调自动驾驶软件中不同模块的协同工作。Cyber 框架为…