当前位置: 首页 > 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…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...