开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第22天,点击查看活动详情
前言
算法的重要性不言而喻!区分度高!
现在学习的门槛低了,只有能上网每个人都可以学编程!培训班6个月就可以培养出来能干活的人,你怎么从这些人中脱颖而出?没错!就是学算法,学一些底层和基础的东西。
说的功利点是为了竞争,卷死对手。真心话说就是能提高自己的基础能力,为技术可持续发展做好充分的准备!!!
提前入门学习书籍:CPrimerPlus、大话数据结构
刷题网站
我是按照代码随想录提供的刷题顺序进行刷题的,大家也可以去刷leetcode最热200道,都可以
刷题嘛,最重要的就是坚持了!!!
画图软件
OneNote
这个要经常用,遇见不懂的流程的话就拿它画一画!
笔记软件
Typoral
题目
解析
贪心算法
没错,今天我们就来到了贪心算法!
贪心算法没有套路,就是自己实验,手动模拟
贪心算法的解题步骤一般分为4步:
- 将问题分解为若干个子问题
- 找出适合的贪心策略
- 求解每一个子问题的最优解
- 将局部最优解堆叠成全局最优解
就比如我们要把一个袋子里装最多的钱,应该怎么装?
局部最优解就是每次都往袋子里装金额最大的钱即可,那么全局最优解也就出现了,它就是局部最优解堆叠而成的!
题目解析
这道题是找合适的饼干给小孩吃
怎么分呢?胃口大的吃大的满足,胃口小的吃小的满足,所以就能想到如下:
解题的思路就是遍历胃口数组,同时判断饼干数组能否满足孩子们的胃口!
满足的话再记个数用来最后返回
代码如下:
具体的解释代码中也有介绍到!
class Solution {
public int findContentChildren(int[] g, int[] s) {
Arrays.sort(g);//对胃口数组进行排序
Arrays.sort(s);//对人数进行排序
int count = 0;//满足孩子胃口的数量
int start = s.length - 1;//控制饼干数组的遍历
// 倒着遍历胃口
for (int index = g.length - 1; index >= 0; index--) {
如果
if(start >= 0 && g[index] <= s[start]) {
start--;
count++;
}
}
return count;
}
}
第二个版本:先满足胃口小的
class Solution {
// 思路1:优先考虑饼干,小饼干先喂饱小胃口
public int findContentChildren(int[] g, int[] s) {
Arrays.sort(g);
Arrays.sort(s);
int start = 0;
int count = 0;
for (int i = 0; i < s.length && start < g.length; i++) {
if (s[i] >= g[start]) {
start++;
count++;
}
}
return count;
}
}