2024年最新找到所有数组中消失的数、最小操作次数使数组元素相等、分发饼干,java线程面试题目

最后

给大家送一个小福利

附高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、准备面试跳槽、自身职业规划迷茫的朋友们。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

while (true){

int min = nums[0];

int max = nums[lg - 1];

if (max == min){

break;

}

for (int i = 0; i < lg - 1; i++) {

nums[i] = nums[i] + 1;

}

step++;

Arrays.sort(nums);

}

return step;

}

哈哈,果然如此,超出时间限制。

是不是arrays.sort消耗了过多的性能?改进一下

小编菜解进阶版

public static int minMoves(int[] nums) {

int lg = nums.length;

int step = 0;

int max = 0;

int min = 0;

while (true){

for (int i = 0; i < lg; i++) {

if (nums[i] > max){

max = nums[i];

}

if (nums[i] < min){

min = nums[i];

}

}

if (max == min){

break;

}

for (int i = 0; i < lg - 1; i++) {

nums[i] = nums[i] + 1;

}

step++;

}

return step;

}

依然超时。

因为最大值与最小值之差,最小值想等于最大值,最小要进行max-min次+1,因此可以再次改进。

小编菜解终极版

public static int minMoves(int[] nums) {

int step = 0;

int min = 0;

int max = nums.length - 1;

while (true){

for (int i = 0; i < nums.length; i++) {

if (nums[max] < nums[i]){

max = i;

}

if (nums[min] > nums[i]){

min = i;

}

}

int diff = nums[max] - nums[min];

if (diff == 0){

break;

}

step += diff;

for (int i = 0; i < nums.length; i++) {

if (i != max){

nums[i] = nums[i] + diff;

}

}

}

return step;

}

依然超时,治标不治本,本身算法的问题。

大佬指点江山

public static int minMoves(int[] nums) {

Arrays.sort(nums);

int count = 0;

for (int i = nums.length - 1; i > 0; i–) {

count += nums[i] - nums[0];

}

return count;

}

看了十分钟,硬是没看懂。先这样吧。

3、LeetCode 455.分发饼干


题目

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

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

小编思路

1、孩子一个数组,饼干一个数组,先按从大到小排序

2、倒序遍历饼干,倒序遍历孩子,饼干能满足孩子,则成功+1

3、当饼干遍历完毕,或者孩子遍历完毕,结束循环

小编菜解

public static int findContentChildren(int[] g, int[] s) {

Arrays.sort(g);//孩子{1,2}

Arrays.sort(s);//饼干{1,2,3}

//可以分的饼干数量

int sum = 0;

int step = 0;

//遍历饼干

for (int i = s.length - 1; i >= 0; i–) {

if ((g.length-step) > 0){

//遍历孩子

System.out.println(“还剩孩子数:”+(g.length-1-step+1));

for (int j = g.length-1-step; j >= 0 ; j–) {

step++;

//最大的饼干满足尾款最大的孩子时,完成+1

System.out.println(“饼干:”+s[i]);

System.out.println(“孩子胃口:”+g[j]);

if(s[i] >= g[j]){

sum++;

System.out.println(“分配饼干成功:”+sum);

break;

}

}

}

}

return sum;

}

大佬指点江山

public int findContentChildren(int[] g, int[] s) {

Arrays.sort(g);

Arrays.sort(s);

int numOfChildren = g.length, numOfCookies = s.length;

int count = 0;

for (int i = 0, j = 0; i < numOfChildren && j < numOfCookies; i++, j++) {

while (j < numOfCookies && g[i] > s[j]) {

j++;

}

if (j < numOfCookies) {

count++;

}

}

return count;

}

推荐阅读

【100天算法入门 - 每日三题 - Day16】第三大的数、字符串中的单词数、排列硬币

【100天算法入门 - 每日三题 - Day15】判断子序列、最长回文数、Fizz Buzz

【100天算法入门 - 每日三题 - Day14】两个数组的交集、有效的完全平方数、字符串中的第一个唯一字符

Java高频面试专题合集解析:

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

当然在这还有更多整理总结的Java进阶学习笔记和面试题未展示,其中囊括了Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构资料和完整的Java架构学习进阶导图!

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

更多Java架构进阶资料展示

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

阿里Java岗面试百题:Spring 缓存 JVM 微服务 数据库 RabbitMQ等

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

1715248170904)]

更多Java架构进阶资料展示

[外链图片转存中…(img-hK0m91Vw-1715248170905)]

[外链图片转存中…(img-7VcZ5apl-1715248170905)]

[外链图片转存中…(img-mVKQ3FVH-1715248170905)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值