java高级面试手册,贪心算法 --- LeetCode刷题,多线程并发解决方案面试题

    • 解题思路:
  • 代码实现:

  • 第七题: 雪糕的最大数量

    • 解题思路:
  • 代码实现:

  • 第八题: 数组中最大数对和的最小值

    • 解题思路:
  • 代码实现:

贪心算法

=======================================================================

在对问题求解时,总是做出在当前看来是最好的选择.

局部最优解 ==> 全局最优解

第一题: 分发饼干

============================================================================

LeetCode 455 : 分发饼干

描述:

假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。

对每个孩子i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。

在这里插入图片描述

解题思路:


局部最优->全局最优

局部最优:让尺寸小的饼干满足胃口小的孩子

全局最优:优先满足胃口小的孩子

  1. 先将2个组数排序
  1. 让child为g数组下最小孩子胃口的下标
  1. 让cookies为s数组下饼干尺寸最小的小标
  1. 遍历 如果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] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。

在这里插入图片描述

解题思路:


局部最优 -> 全局最优

局部最优: 优先选右边界最小的区间,避免交叉

全局最优: 保留最多的不相交区间

  1. 排序区间,根据右边界的大小排序
  1. 从左向右遍历,如果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 天的价格。

在每一天,你可能会决定购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以购买它,然后在 同一天 出售。

返回 你能获得的 最大 利润 。

在这里插入图片描述

解题思路:


局部最优 -> 全局最优

局部最优: 只要明天卖能赚钱就卖

全局最优: 总是能获得利润

  1. 遍历数组,只要第二天能赚钱,就卖掉,然后把利润加起来

代码实现:


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 ,你最初位于数组的 第一个下标

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标。

在这里插入图片描述

解题思路:


局部最优 -> 全局最优

局部最优: 每次跨越都跨最远的距离

全局最优: 跳跃的总长度最远

  1. mostLength记录可以跳跃到的下标

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

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、安卓逆向、云计算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值