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

贪心算法理论基础和习题【算法学习day.17】

前言

###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!


理论基础

贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前状态下的最优决策的算法策略,简而言之就是通过局部最优达到全局最优

如何解决这类问题,就在习题中体会~


习题

ps:部分题我不分析,贪心多少带点赌的思想

1.分发饼干

题目链接:455. 分发饼干 - 力扣(LeetCode)

题面:

基本分析:尽可能花最小的代价满足孩子,所以排序,然后采用双指针

代码:

class Solution {public int findContentChildren(int[] g, int[] s) {int clen = g.length;int blen  = s.length;int count = 0;Arrays.sort(g);Arrays.sort(s);int l1 = 0;int l2 = 0;while(l1<clen&&l2<blen){if(g[l1]<=s[l2]){count++;l1++;l2++;}else{l2++;}}return count;}
}

2.摆动序列

题目链接:376. 摆动序列 - 力扣(LeetCode)

题面:

代码:

class Solution {public int wiggleMaxLength(int[] nums) {int n = nums.length;// if(n==2&&nums[0]-nums[1]==0)return 1;int[] flag = new int[n];int count = n;for(int i = 1;i<n-1;i++){int l = i-1;int r = i+1;while(l-1>=0&&flag[l]==1)l--;while(r+1<n&&flag[r]==1)r++;if((nums[i]>=nums[l]&&nums[i]<=nums[r])||(nums[i]<=nums[l]&&nums[i]>=nums[r])){flag[i] =1 ;count--;}}Arrays.sort(nums);if(nums[0]==nums[n-1])return 1;return count;}
}

3.最大子数组和

题目链接:53. 最大子数组和 - 力扣(LeetCode)

题面:

代码: 

class Solution {public int maxSubArray(int[] nums) {int n = nums.length;int l = 0;int r = 1;int sum = nums[0];int max = nums[0];while(r<n){if(nums[r]>=nums[r]+sum){sum = nums[r];l=r;}else {sum+=nums[r];}max = Math.max(max,sum);r++;}return max;}
}

4.买卖股票的最佳时机II

题目链接:122. 买卖股票的最佳时机 II - 力扣(LeetCode)

题面:

代码:

class Solution {public int maxProfit(int[] prices) {int n = prices.length;int sum = 0;for(int i = 1;i<=n-1;i++){int k = prices[i]-prices[i-1];if(k>0)sum+=k;}return sum;// int l = 1;// int pre = prices[0];// while(l<n){//     if(prices[l]>pre){//         sum+=(prices[l]-pre);//         if(l+2<n){//             pre = prices[l+1];//             l++;//         }else{//             break;//         }//     }//     else if(prices[l]<pre){//         pre = prices[l];//     }//     l++;// }// return sum;}
}

5.跳跃游戏

题目链接:55. 跳跃游戏 - 力扣(LeetCode)

题面:

代码:

class Solution {int[] arr;int len;public boolean canJump(int[] nums) {int n  = nums.length;if(n==1)return true;arr = nums;len = n;int flag1 = 0;int flag2 = 0;for(int i = 0;i<=n-1;i++){if(nums[i]==0){flag1=1;if(canTrap(i)==false){flag2 = 1;break;}}}if(flag1==0)return true;if(flag2==0)return true;return false;}public boolean canTrap(int flag){for(int i = flag-1;i>=0;i--){if(arr[i]>(flag-i))return true;if(flag==len-1&&arr[i]>=(flag-i))return true;}return false;}
}

6.跳跃游戏II

题目链接:45. 跳跃游戏 II - 力扣(LeetCode)

题面:

代码:

class Solution {int len;int[] arr;public int jump(int[] nums) {arr = nums;len = nums.length;int count = 0;int l = 0;while(l<len-1){count++;l = jumpWhere(l);}return count;}public int jumpWhere(int flag){int n = arr[flag];if(flag+n>=len-1)return len-1;int ans = flag+1;int max = arr[flag+1];for(int i = flag+2;i<=flag+n;i++){if(arr[i]+i-(flag+1)>=max){max = arr[i]+i-(flag+1);ans = i;}}return ans;}
}

7.K次取反后最大化的数组和

题目链接:1005. K 次取反后最大化的数组和 - 力扣(LeetCode)

题面:

代码:

class Solution {public int largestSumAfterKNegations(int[] nums, int k) {Arrays.sort(nums);int count = 0;int n = nums.length;while(count<n&&count<k&&nums[count]<0){nums[count]=-nums[count];count++;}Arrays.sort(nums);if((k-count)%2!=0)nums[0]=-nums[0];int sum = 0;for(int i = 0;i<n;i++){sum+=nums[i];}return sum;}
}

8.加油站

题目链接:134. 加油站 - 力扣(LeetCode)

题面:

代码:

class Solution {public int canCompleteCircuit(int[] gas, int[] cost) {int n = gas.length;int ans = 0;int l = 0;int flag = -1;int sum = 0;for(int i =0;i<=n-1;i++){gas[i] = gas[i]-cost[i];sum+=gas[i];if(gas[i]>=0&&flag!=-1){l = i;flag = 0;}}if(sum<0)return -1;ans = l;sum = 0;while(l<n){if(sum+gas[l]<0){l=l+1;sum = 0;ans = l;}else{sum+=gas[l];l++;}}return ans;}
}

后言

上面是贪心算法基本概念和部分习题,下一篇会讲解贪心算法的其他相关力扣习题,希望有所帮助,一同进步,共勉!   

相关文章:

贪心算法理论基础和习题【算法学习day.17】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&am…...

爬虫ip技术未来发展趋势

各位朋友&#xff0c;大家好&#xff01;有伙伴问爬虫技术未来会有更好的发展么&#xff0c;那今天小蝌蚪来跟大家聊聊爬虫技术未来的发展趋势分享一下行业咨询。 大家在日常工作和生活中&#xff0c;都希望事情能更省心、高效吧&#xff1f;未来的爬虫技术就朝着这个方向发展…...

推荐一款功能强大的文字处理工具:Atlantis Word Processor

Atlantis word proCEssor是一款功能强大的文字处理工具。该软件可以让用户放心的去设计文档&#xff0c;并且软件的界面能够按用户的意愿去自定义&#xff0c;比如工具栏、字体选择、排版、打印栏等等&#xff0c;当然还有更多的功能&#xff0c;比如你还可以吧软件界面中的任何…...

语言≠思维,大模型学不了推理:一篇Nature让AI社区炸锅了

转自&#xff1a;机器之心 大语言模型&#xff08;LLM&#xff09;为什么空间智能不足&#xff0c;GPT-4 为什么用语言以外的数据训练&#xff0c;就能变得更聪明&#xff1f;现在这些问题有 「标准答案」了。 近日&#xff0c;一篇麻省理工学院&#xff08;MIT&#xff09;等…...

Ubuntu 安装 npm

1. 升级apt sudo apt-get update 2. 安装nodejs sudo apt install nodejs 3. 安装npm sudo apt-get install npm 4. 查看版本 node -v npm -v 完成安装&#xff01;...

Go:package

文章目录 标准库概述regexp包锁和sync包自定义包和可见性基本格式导入外部安装包包的初始化 自定义包使用godoc自定义包的目录结构 标准库概述 在之前的部分已经用了很多和标准库有关的内容&#xff0c;比如有fmt&#xff0c;os这种功能 unsafe: 包含了一些打破 Go 语言“类型…...

大数据之微服务注册、发现与熔断方案

大数据微服务注册、发现与熔断方案 介绍实现框架利用Spring Cloud实现微服务注册&#xff0c;发现&#xff0c;熔断实例&#xff1f; 一&#xff0c;介绍 大数据微服务注册、发现与熔断是微服务架构中的关键概念&#xff0c;它们各自在微服务架构中扮演着重要的角色。以下是对这…...

最新出炉!2024年邮件营销平台综合盘点

随着数字化营销的不断发展&#xff0c;邮件营销依然是企业与客户保持联系的重要渠道之一。2024年&#xff0c;邮件营销平台市场竞争激烈&#xff0c;各大平台纷纷推出新功能&#xff0c;以满足企业日益增长的需求。在众多平台中&#xff0c;Zoho Campaigns作为一款成熟的邮件营…...

Qgis 开发初级 《ToolBox》

Qgis 有个ToolBox 的&#xff0c;在Processing->ToolBox 菜单里面&#xff0c;界面如下。 理论上Qgis这里面的工具都是可以用脚本或者C 代码调用的。界面以Vector overlay 为例子简单介绍下使用方式。Vector overlay 的意思是矢量叠置分析&#xff0c;和arcgis软件类似的。点…...

Apache HttpClient 和 OkHttpClient 的使用

概述 Apache HttpClient Apache HttpClient是一个开源的HTTP客户端库&#xff0c;提供了丰富的HTTP通信功能。它支持HTTP/1.1和HTTPS协议&#xff0c;具有连接池管理、重试机制、代理设置等高级特性。HttpClient的API设计虽然相对繁琐&#xff0c;但提供了高度的可配置性和灵…...

文本列的性能优化?深入Oracle全文索引

一.什么是全文索引&#xff1f; 全文索引通过分析和处理文本&#xff0c;将文档中的单词分解为词条&#xff08;tokens&#xff09;&#xff0c;然后存储词条与其所在文档的映射关系。这使得数据库可以快速定位包含特定关键字的记录&#xff0c;而不必对所有文本逐字匹配。 二…...

GoogleChrome和Edge浏览器闪屏问题

GoogleChrome和Edge浏览器闪屏问题 文章目录 GoogleChrome和Edge浏览器闪屏问题 买了电脑半年, GoogleChrome和edge浏览器出现了一个令人头疼的问题–闪屏, 就是打开这两个浏览器之后, 就会出现电脑屏幕一闪一闪的, 过一会就看不见了, 跟黑夜里的闪电一样, 遇到这种情况我都会直…...

【设计模式系列】迭代器模式(七)

一、什么是迭代器模式 迭代器模式&#xff08;Iterator Pattern&#xff09;是一种行为型设计模式&#xff0c;它提供一种方法来顺序访问一个聚合对象中的各个元素&#xff0c;而不暴露其内部的表示。迭代器模式将集合的遍历过程封装在一个独立的迭代器对象中&#xff0c;这样…...

Go性能基础

本篇内容是根据2020年2月份#117 Foundations of Go performance音频录制内容的整理与翻译 在这个多部分系列的第一部分中&#xff0c;Ian 和 Johnny 以及 Miriah Peterson 和 Bryan Boreham 一起揭开了 Go 程序性能的第一层重要内容。 过程中为符合中文惯用表达有适当删改, 版…...

银河麒麟v10安装Anaconda(python大蟒蛇)+pycharm安装

Anaconda中文是大蟒蛇&#xff0c;是一个用于科学计算的Python发行版&#xff0c;预装大量的模块包&#xff0c;不需要单独下载python进行安装 1安装环境 1.1系统版本 操作系统版本&#xff1a;银河麒麟桌面版操作系统v10(SP1) 版本号&#xff1a;2303 架构&#xff1a;x86…...

集群聊天服务器——逻辑梳理

网络聊天服务器项目&#xff0c;该项目分为4个模块&#xff1a; 首先是网络模块&#xff1a;我使用了muduo高性能网络库&#xff0c;解耦合网络与业务之间这两部分代码&#xff0c;可以更加专注与业务的功能开发其次是服务层模块&#xff1a;我使用了基于C11的技术比如绑定器和…...

10 最长回文子串、买卖股票的最好时机(一)、[NOIP2002 普及组] 过河卒24_10_30

这里写目录标题 cpp 101 最长回文子串1.1 题目1.2 思路1.3 程序实现 2 买卖股票的最好时机(一)2.1 题目2.2 思路2.3 程序实现2.4 程序实现 – 优化 3 [NOIP2002 普及组] 过河卒3.1题目3.2 思路3.3程序实现 – dp 4 题目链接 cpp 10 1 最长回文子串 1.1 题目 1.2 思路 读完了…...

Handler、Looper、message进阶知识

Android Handler、Looper、Message的进阶知识 在Android开发中&#xff0c;Handler、Looper和Message机制是多线程通信的核心。为了深入理解并优化它们的使用&#xff0c;尤其是在高并发和UI性能优化中&#xff0c;可以利用一些高级特性。 1. Handler的高阶知识 Handler在基本…...

一文理解决策树:原理、数学公式与全流程实战讲解

一、背景与来源 决策树&#xff08;Decision Tree&#xff09;是一种常见的机器学习算法&#xff0c;主要用于分类和回归问题。其概念来源于统计学和决策论&#xff0c;能够直观地模拟人类的决策过程。最早的决策树算法之一是 1963 年由 Hunt 等人提出的&#xff0c;该算法逐渐…...

day04-LogStash扩展

1.LogStash性能不稳定&#xff08;某天关闭后&#xff0c;再次启动就非常慢&#xff09;&#xff0c;所以后面我们用Filebeat。2.先禁用 # geoip { # source > "clientip" # }3.在生产中要是用nignx服务或tomcat服务我们用EFK架构就可以排查技巧观察点 LogS…...

从‘跟网’到‘构网’:手把手教你用MATLAB/Simulink搭建虚拟同步机(VSG)仿真模型(附模型下载)

从零构建虚拟同步机&#xff1a;MATLAB/Simulink实战指南 电力电子工程师们正面临一个新时代的挑战——如何让逆变器从被动"跟网"转变为主动"构网"。想象一下&#xff0c;当你第一次在示波器上看到自己搭建的虚拟同步机模型成功响应电网频率波动时&#xf…...

VLSI设计实战:手把手教你用SPICE模型搭建9种基础电路(附完整代码)

VLSI设计实战&#xff1a;手把手教你用SPICE模型搭建9种基础电路&#xff08;附完整代码&#xff09; 在集成电路设计的浩瀚宇宙中&#xff0c;SPICE模型就像工程师手中的瑞士军刀。我第一次接触SPICE仿真时&#xff0c;面对密密麻麻的网表文件完全不知所措——直到导师扔给我一…...

告别内存焦虑:用DiskANN在单机上搞定十亿向量检索的完整配置与调优指南

告别内存焦虑&#xff1a;用DiskANN在单机上搞定十亿向量检索的完整配置与调优指南 当你的推荐系统需要处理超过1亿条商品特征向量&#xff0c;或是生物医药团队要匹配数十亿分子结构时&#xff0c;传统内存索引方案会让服务器内存条价格直接突破年度预算。这时DiskANN就像一位…...

5G赋能下的车联网协同感知:自动驾驶感知盲区消除新思路

1. 为什么自动驾驶需要"组队开黑"模式&#xff1f; 想象一下你开车经过一个十字路口&#xff0c;左侧突然冲出一辆外卖电动车——这是典型的A柱盲区问题。传统自动驾驶就像闭着眼睛打游戏&#xff0c;全靠本车传感器"听声辨位"。而5G车联网协同感知&#x…...

Java响应式编程实战:用Reactor 3.x处理高并发请求(附完整代码示例)

Java响应式编程实战&#xff1a;用Reactor 3.x处理高并发请求&#xff08;附完整代码示例&#xff09; 在当今高并发的互联网应用中&#xff0c;传统的同步阻塞式编程模型往往成为性能瓶颈。想象一下&#xff0c;当你的电商系统在秒杀活动中面临每秒数万次的请求时&#xff0c;…...

MangoHud项目发布流程:版本管理完全指南

MangoHud项目发布流程&#xff1a;版本管理完全指南 【免费下载链接】MangoHud A Vulkan and OpenGL overlay for monitoring FPS, temperatures, CPU/GPU load and more. Discord: https://discordapp.com/invite/Gj5YmBb 项目地址: https://gitcode.com/gh_mirrors/ma/Mang…...

高效掌握Mermaid CLI:命令行图表工具自动化与高效渲染实战指南

高效掌握Mermaid CLI&#xff1a;命令行图表工具自动化与高效渲染实战指南 【免费下载链接】mermaid-cli Command line tool for the Mermaid library 项目地址: https://gitcode.com/gh_mirrors/me/mermaid-cli 在技术文档创作和软件开发过程中&#xff0c;如何快速将文…...

[小红书AI自动化教程]凌晨2点我在睡觉,AI偷偷发了篇小红书爆款:醒来99+点赞,人类社媒苦役终结?

我把小红书交给 OpenClaw&#xff0c;它开始自己干活了 凌晨两点&#xff0c;我在睡觉&#xff0c;它却偷偷发了一篇爆款。 醒来点赞99&#xff0c;评论全是“姐妹求链接”。这不是科幻。去年我还为追热点熬夜秃头&#xff0c;如今一句“今天发什么”&#xff0c;AI 就能完成选…...

Python邮件自动化实战:基于imaplib和email库的高效邮件处理方案

1. Python邮件自动化处理的核心价值 每天早晨打开邮箱&#xff0c;看到堆积如山的未读邮件时&#xff0c;你是否感到头皮发麻&#xff1f;作为曾经每天要处理200封邮件的市场分析师&#xff0c;我完全理解这种痛苦。直到发现Python的imaplib和email这对黄金组合&#xff0c;我的…...

保姆级教程:用LayoutLMv3和CDLA数据集搞定文档版面分析(附完整代码)

从零构建文档智能分析系统&#xff1a;基于LayoutLMv3与CDLA的实战指南 当一份复杂的合同或报告需要快速解析时&#xff0c;传统OCR技术往往只能提供杂乱无章的文本碎片。而现代文档智能系统已经能够理解文档的逻辑结构——自动识别标题、段落、表格的位置关系&#xff0c;就像…...