-
- 解题思路:
-
代码实现:
-
第七题: 雪糕的最大数量
-
- 解题思路:
-
代码实现:
-
第八题: 数组中最大数对和的最小值
-
- 解题思路:
-
代码实现:
=======================================================================
在对问题求解时,总是做出在当前看来是最好的选择.
从局部最优解 ==> 全局最优解
============================================================================
LeetCode 455 : 分发饼干
描述:
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。
对每个孩子i
,都有一个胃口值 g[i]
,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j
,都有一个尺寸 s[j]
。如果 s[j] >= g[i]
,我们可以将这个饼干 j
分配给孩子 i
,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。
局部最优->全局最优
局部最优:让尺寸小的饼干满足胃口小的孩子
全局最优:优先满足胃口小的孩子
- 先将2个组数排序
- 让child为g数组下最小孩子胃口的下标
- 让cookies为s数组下饼干尺寸最小的小标
- 遍历 如果g[child] <= s[cookies] 那么就能满足
class Solution {
public int findContentChildren(int[] g, int[] s) {
// 先进行排序
Arrays.sort(g);
Arrays.sort(s);
// 让胃口最小的孩子 吃 最小尺寸的饼干
int child = 0;
int cookies = 0;
int count = 0;
while(child < g.length && cookies < s.length){
// 这里的饼干回复度 >= 孩子饥饿度 才能满足
if(g[child] <= s[cookies]){
count++;
child++;
}
cookies++;
}
return count;
}
}
=============================================================================
LeetCode 435 : 无重叠区间
描述:
给定一个区间的集合 intervals
,其中 intervals[i] = [starti, endi]
。返回 需要移除区间的最小数量,使剩余区间互不重叠 。
局部最优 -> 全局最优
局部最优: 优先选右边界最小的区间,避免交叉
全局最优: 保留最多的不相交区间
- 排序区间,根据右边界的大小排序
- 从左向右遍历,如果
i
区间的右边界<
i+1
区间的左边界,则需要移除i+1
区间
class Solution {
public int eraseOverlapIntervals(int[][] intervals) {
// 贪心思路 : 每次都保留区间结尾最小的且不相交的区间
// 排序 根据每组最后一个数排序
Arrays.sort(intervals,(o1,o2)->o1[1]-o2[1]);
int count = 0;
// 让 pre 指向第一个区间的右边界 如果下一个区间的左边界 小于 这个pre 就是需要移除的
int pre = intervals[0][1];
// 因为第一组肯定是不需要移除的 所以让i == 1
for (int i = 1; i < intervals.length; i++){
// 下一组左边界 < pre 移除
if (intervals[i][0] < pre){
count++;
}else{
// 不需要移除 就让pre 指向下一组的右边界
pre = intervals[i][1];
}
}
return count;
}
}
==================================================================================
LeetCode 122: 买卖股票的最佳时机 II
描述:
给定一个数组 prices
,其中 prices[i]
表示股票第 i
天的价格。
在每一天,你可能会决定购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以购买它,然后在 同一天 出售。
返回 你能获得的 最大 利润 。
局部最优 -> 全局最优
局部最优: 只要明天卖能赚钱就卖
全局最优: 总是能获得利润
- 遍历数组,只要第二天能赚钱,就卖掉,然后把利润加起来
class Solution {
public int maxProfit(int[] prices) {
int profit = 0;
// 这里假设 如果当天买,明天卖了能赚钱,就今天买了,明天卖。
for(int i = 0; i < prices.length - 1; i ++){
if(prices[i] < prices[i + 1]){
profit += prices[i+1] - prices[i];
}
}
return profit;
}
}
============================================================================
LeetCode 55: 跳跃游戏
描述:
给定一个非负整数数组 nums
,你最初位于数组的 第一个下标 。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标。
局部最优 -> 全局最优
局部最优: 每次跨越都跨最远的距离
全局最优: 跳跃的总长度最远
- 用
mostLength
记录可以跳跃到的下标
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
1200页Java架构面试专题及答案
小编整理不易,对这份1200页Java架构面试专题及答案感兴趣劳烦帮忙转发/点赞
百度、字节、美团等大厂常见面试题
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
链图片转存中…(img-G5vNb3Yr-1712445011873)]
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算