找到所有数组中消失的数、最小操作次数使数组元素相等、分发饼干_找到所有数组中消失的数字

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

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

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

如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
img

正文

        int x = (num - 1) % n;
        nums[x] += n;
    }
    List<Integer> ret = new ArrayList<Integer>();
    for (int i = 0; i < n; i++) {
        if (nums[i] <= n) {
            ret.add(i + 1);
        }
    }
    return ret;
}

}


### 2、LeetCode 453.最小操作次数使数组元素相等 TODO


#### 题目



> 
> 给定一个长度为 *n* 的 **非空**整数数组,每次操作将会使 *n* - 1 个元素增加 1。找出让数组所有元素相等的最小操作次数。
> 
> 
> 


#### 小编思路



> 
> 暴力算法,循环数组,除了最大的那个数,其它的都+1,直到最大数和最小数相等为止,不出意外会超出时间限制。
> 
> 
> 


#### 小编菜解



/**

  • 给定一个长度为 n 的 非空 整数数组,每次操作将会使 n - 1 个元素增加 1。找出让数组所有元素相等的最小操作次数。
  • [1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
    */
    public static int minMoves(int[] nums) {
    Arrays.sort(nums);
    int lg = nums.length;
    int step = 0;
    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++) {

一、网安学习成长路线图

网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、网安视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述

三、精品网安学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、网络安全源码合集+工具包

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

五、网络安全面试题

最后就是大家最关心的网络安全面试题板块
在这里插入图片描述在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

.cn/b07abbfab1fd4edc800d7db3eabb956e.png)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
[外链图片转存中…(img-vzZc5feR-1713604247550)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 22
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值