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

贪心+矩阵算法

贪心算法

贪心的本质是:选择每一阶段的局部最优,从而达到全局最优

做题的时候,只要想清楚 局部最优 是什么,如果推导出全局最优,其实就够了。

买卖股票的最佳实际

思路:如果第i天卖出股票,则最大利润为(该天的股价-前面天数中最小的股价),然后与已知的最大利润比较,如果大于则更新当前最大利润的值

class Solution {public int maxProfit(int[] prices) {// 初始化最大利润为0,最低价格为第一个价格int maxProfit = 0;int minPrice = 100000;// 遍历价格数组for (int price : prices) {// 更新最低价格minPrice = Math.min(minPrice, price);// 更新最大利润maxProfit = Math.max(maxProfit, price - minPrice);}return maxProfit;}
}

跳跃游戏

class Solution {public boolean canJump(int[] nums) {int maxReach = 0; // 记录能到达的最远索引int n = nums.length;for (int i = 0; i < n; i++) {// 如果当前位置 i 已经超出最大可达范围,则说明无法继续前进if (i > maxReach) {return false;}// 更新最大可达范围maxReach = Math.max(maxReach, i + nums[i]);// 如果最大可达范围已经超过或等于最后一个索引,则返回 trueif (maxReach >= n - 1) {return true;}}return false;}
}

跳跃游戏Ⅱ

class Solution {public int jump(int[] nums) {int maxReach = 0;int current = 0;int jumps = 0;if( nums.length == 1) return 0;for(int i=0;i<nums.length-1;i++){maxReach=Math.max(i+nums[i],maxReach);if(i == current){jumps++;current = maxReach;if(current >= nums.length-1){return jumps;}}}return 0;}
}

划分字母区间

class Solution {public List<Integer> partitionLabels(String S) {char[] s = S.toCharArray();int n = s.length;int[] last = new int[26];for (int i = 0; i < n; i++) {last[s[i] - 'a'] = i; // 每个字母最后出现的下标}List<Integer> ans = new ArrayList<>();int start = 0, end = 0;for (int i = 0; i < n; i++) {end = Math.max(end, last[s[i] - 'a']); // 更新当前区间右端点的最大值if (end == i) { // 当前区间合并完毕ans.add(end - start + 1); // 区间长度加入答案start = i + 1; // 下一个区间的左端点}}return ans;}
}

矩阵

数组中第K个最大元素

class Solution {public int findKthLargest(int[] nums, int k) {int[] buckets = new int[20001];int n = nums.length;for(int i =0;i<n;i++){buckets[nums[i]+10000]++;}for(int i = 20000;i>=0;i--){k = k - buckets[i];if(k <= 0){return i-10000;}}return 0;}
}

有效括号

class Solution {public boolean isValid(String s) {//特殊情况if(s.isEmpty()){return true;}//创建栈,字符类型Stack<Character> stack = new Stack<Character>();for(char c:s.toCharArray()){if(c == '('){stack.push(')');}else if(c == '{'){stack.push('}');}else if(c=='['){stack.push(']');}// 要先判断是否为空,再判断出栈else if(stack.empty() || c!=stack.pop()){return false;}}if(stack.empty()){return true;}return false;}
}

每日温度

class Solution {public int[] dailyTemperatures(int[] temperatures) {int n = temperatures.length;int[] result = new int[n];Stack<Integer> stack = new Stack<>(); // 单调递减栈,存索引for (int i = 0; i < n; i++) {// 如果当前温度比栈顶索引的温度高,则计算等待天数while (!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]) {int prevIndex = stack.pop();result[prevIndex] = i - prevIndex;}// 当前索引入栈stack.push(i);}return result;}
}

http://www.xdnf.cn/news/17171.html

相关文章:

  • Go语言Ebiten坦克大战
  • mysql 索引失效分析
  • 【数据结构】二叉树练习
  • 从BaseMapper到LambdaWrapper:MyBatis-Plus的封神之路
  • 【Unity3D实例-功能-镜头】第三人称视觉-镜头优化
  • Oracle 12c + Pl/Sql windows系统下表空间创建、迁移,dmp备份导入,数据库字符集更改
  • Oracle exp imp expdp impdp 命令详解
  • 如何快速开发符合Matter标准的智能家居设备?
  • 一个程序通过 HTTP 协议调用天气 API,解析 JSON 格式的天气数据,提取关键信息并格式化输出:日期、天气状况、温度范围、风向、湿度等核心气象数据。
  • 锡膏种类多,不同的锡膏有什么区别,该如何正确选择?
  • JAVA第六学:数组的使用
  • k8s中pod如何调度?
  • 读取了错误数据导致STM32 单片机Hard Fault
  • [特殊字符] 2025年生成式大模型部署与推理优化全景解析
  • WebSocket 在多线程环境下处理 Session并发
  • 《Day3-PyTorch 自动微分入门:从计算图到梯度下降的实践指南》
  • Tiger任务管理系统-10
  • 基于Spring Cloud Stream与Kafka的事件驱动微服务架构设计与实战指南
  • Dify 从入门到精通(第 20/100 篇):Dify 的自动化测试与 CI/CD
  • 【Kafka系列】第二篇| Kafka 的核心概念、架构设计、底层原理
  • 关于vue2中对接海康摄像头以及直播流rtsp或rtmp,后台ffmpeg转码后通过ws实现
  • 企业家 IP 发展态势剖析|创客匠人
  • Kong vs. NGINX:从反向代理到云原生网关的全景对比
  • Linux第一阶段练习
  • 一篇文章入门TCP与UDP(保姆级别)
  • 栅栏密码的加密解密原理
  • 动手学深度学习13.11. 全卷积网络 -笔记练习(PyTorch)
  • Modbus转Profinet网关与西门子PLC的互联配置案例:用于永宏品牌变频器的控制实现
  • 数据标注之数据集的类型与如何标注
  • 【数据结构——并查集】