【经典LeetCode算法题目专栏分类】【第5期】贪心算法:分发饼干、跳跃游戏、模拟行走机器人

《博主简介》

小伙伴们好,我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。

更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~

👍感谢小伙伴 们点赞、关注!

分发饼干

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| class Solution : def findContentChildren****(**** self****,**** g****:**** List******** ****int**** ****,**** s****:**** List******** ****int**** ****)**** -> int : # 贪心算法 res = 0 g****.**** sort****()**** s****.**** sort****()**** i = 0 j = 0 while i < len ( g****)**** and j < len ( s****):**** # 饼干满足胃口 if g******** i******** <= s******** j****:**** res += 1 i += 1 j += 1 else : # 饼干不满足胃口,查找下一个饼干 j += 1 return res |

跳跃游戏

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| class Solution : def canJump****(**** self****,**** nums****:**** List******** ****int**** ****)**** -> bool : # 贪心算法 reach_index = len ( nums****)**** - 1 # 表示能够到达的索引位置 for i in range ( len ( nums****)-**** 1****,-**** 1****,-**** 1****):**** # 从后往前遍历,如果满足下述条件说明能够达到当前索引 if i + nums******** i******** >= reach_index****:**** reach_index = i return reach_index == 0 class Solution : def canJump****(**** self****,**** nums****:**** List******** ****int**** ****)**** -> bool : if nums == **** 0****: return True maxDist = 0 # 能够达到的最远距离 end_index = len ( nums****)-**** 1 for i****,**** jump in enumerate ( nums****):**** # maxDist >= i表示能够达到当前索引位置,并且从当前索引开始 if maxDist >= i and i****+**** jump > maxDist****:**** maxDist = i****+**** jump if maxDist >= end_index****:**** return True return False |

跳跃游戏2

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| class Solution : def jump****(**** self****,**** nums****:**** List******** ****int**** ****)**** -> int : end = 0 # end 表示当前能跳的边界 maxPosition = 0 steps = 0 for i in range ( len ( nums****)**** - 1****):**** # 找能跳的最远的 maxPosition = max ( maxPosition****,**** nums******** i******** + i****);**** if i == end****:**** #遇到边界,就更新边界,并且步数加一 end = maxPosition****;**** steps += 1 return steps****;**** |

模拟行走机器人

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| class Solution : def robotSim****(**** self****,**** commands****:**** List******** ****int**** ****,**** obstacles****:**** List******** List****\[**** ****int**** ****])**** -> int : if not commands****:**** return 0 # 索引0,1,2,3分别表示北,东,南,西 direx = **** 0****,**** 1****,**** 0****,**** ****-**** 1**** direy = **** 1****,**** 0****,**** ****-**** 1****,**** 0**** curx****,**** cury****,**** curdire****,**** ans = 0****,**** 0****,**** 0****,**** 0 com_len****,**** obs_len = len ( commands****),**** len ( obstacles****)**** obstacle_set = {( obstacles******** i******** 0****,**** obstacles******** i******** 1****)**** for i in range ( obs_len****)}**** # 变为集合,使判断是否有障碍物更快 for i in range ( com_len****):**** if commands******** i******** == - 1****:**** # 向右转90度 curdire = ( curdire + 1****)**** % 4 elif commands******** i******** == - 2****:**** # 向左转90度 curdire = ( curdire + 3****)**** % 4 else : # 1 <= x <= 9: 向前移动x个单位长度 for j in range ( commands******** i****):**** # 试图走出一步,并判断是否遇到了障碍物 nx = curx + direx******** curdire******** ny = cury + direy******** curdire******** # 当前坐标不是障碍物,计算并存储的最大欧式距离的平方做比较 if ( nx****,**** ny****)**** not in obstacle_set****:**** curx = nx cury = ny ans = max ( ans****,**** curx********* curx + cury********* cury****)**** else : # 是障碍点,被挡住了,停留,智能等待下一个指令,那可以跳出当前指令了。 break return ans |

关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!

觉得不错的小伙伴,感谢点赞、关注加收藏哦!
欢迎关注下方GZH:阿旭算法与机器学习,共同学习交流~

相关推荐
fengxin_rou8 分钟前
LeetCode 三道高频中等数组算法详解|除自身乘积、矩阵置零、螺旋矩阵
算法·leetcode·矩阵
8Qi89 小时前
LeetCode 75:颜色分类(荷兰国旗问题)—— Java 题解 ✅
java·算法·leetcode·指针·排序
(●—●)橘子……12 小时前
力扣第503场周赛练习理解
python·学习·算法·leetcode·职场和发展·周赛
风筝在晴天搁浅15 小时前
快手 CodeTop LeetCode 224.基本计算器
数据结构·算法·leetcode
8Qi817 小时前
LeetCode 31:下一个排列(Next Permutation)—— 完整题解笔记 ✅
笔记·算法·leetcode·指针·思维·排列
玖釉-18 小时前
编辑距离(Edit Distance)——从字符串相似度到动态规划经典模型
算法·leetcode·动态规划
_日拱一卒19 小时前
LeetCode:46全排列
算法·leetcode·职场和发展
剑挑星河月19 小时前
31.下一个排列
java·算法·leetcode
凌波粒19 小时前
LeetCode--98.验证二叉搜索树(二叉树)
算法·leetcode·职场和发展
Misnearch19 小时前
3635. 最早完成陆地和水上游乐设施的时间II
leetcode·贪心·排序