最后
给大家送一个小福利
附高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、准备面试跳槽、自身职业规划迷茫的朋友们。
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进阶学习笔记和面试题未展示,其中囊括了Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构资料和完整的Java架构学习进阶导图!
更多Java架构进阶资料展示
1715248170904)]
更多Java架构进阶资料展示
[外链图片转存中…(img-hK0m91Vw-1715248170905)]
[外链图片转存中…(img-7VcZ5apl-1715248170905)]
[外链图片转存中…(img-mVKQ3FVH-1715248170905)]