丢失的数字、移动零、单词规律

文章介绍了LeetCode中的三个编程题目:寻找丢失的数字、移动数组中的零和单词规律匹配。还讨论了高效算法和Java开发者的学习资源,特别是对于提升技能和面试准备的建议。
摘要由CSDN通过智能技术生成

1、LeetCode 268.丢失的数字


题目

给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。

进阶:

你能否实现线性时间复杂度、仅使用额外常数空间的算法解决此问题?

小编菜解

private static int test01(int[] nums){

Arrays.sort(nums);

if (nums[0] != 0){

return 0;

}

if (nums[nums.length-1] != nums.length){

return nums.length;

}

int min = 0;

int max = nums.length;

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

int next = nums[i]+1;

if (i+1 <max && nums[i+1]!=next){

return next;

}

}

return -1;

}

2、LeetCode 283.移动零


题目

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

小编菜解

private static void test02(int[] nums){

int[] temp = new int[nums.length];

int zeroNum = 0;

int notZeroNum = 0;

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

if (nums[i]!=0){

temp[notZeroNum] = nums[i];

notZeroNum++;

}else{

temp[nums.length - 1 - zeroNum] = 0;

zeroNum++;

}

}

}

思路及算法

使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。

右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移。

注意到以下性质:

左指针左边均为非零数;

右指针左边直到左指针处均为零。

因此每次交换,都是将左指针的零与右指针的非零数交换,且非零数的相对顺序并未改变。

大佬指点江山

public static void moveZeroes(int[] nums) {

int n = nums.length, left = 0, right = 0;

while (right < n){

if (nums[right] != 0){

swap(nums,left,right);

left++;

}

right++;

}

}

public static void swap(int[] nums, int left, int right) {

int temp = nums[left];

nums[left] = nums[right];

nums[right] = temp;

}

大佬想的和我想的确实是不一样的。

3、LeetCode 290.单词规律


题目

给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。

这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。

小编菜解

public static boolean wordPattern(String pattern, String s) {

int pl = pattern.length();

String[] arr = s.split(" ");

int sl = arr.length;

if (pl!=sl){

return false;

}

Map<Character, String> map1 = new HashMap<Character, String>();

Map<String, Character> map2 = new HashMap<String, Character>();

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

if (!map1.containsKey(pattern.charAt(i))){

if (map2.containsKey(arr[i])){

return false;

}

map1.put(pattern.charAt(i),arr[i]);

map2.put(arr[i],pattern.charAt(i));

}else{

if(!map1.get(pattern.charAt(i)).equals(arr[i])){

return false;

}

}

}

return true;

}

大佬指点江山

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

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

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

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

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

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

无论是哪家公司,都很重视基础,大厂更加重视技术的深度和广度,面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。

针对以上面试技术点,我在这里也做一些分享,希望能更好的帮助到大家。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
你是不是真的喜欢这家公司,是不是能真的得到锻炼。

针对以上面试技术点,我在这里也做一些分享,希望能更好的帮助到大家。

[外链图片转存中…(img-rcyjWYRZ-1713446868822)]

[外链图片转存中…(img-6YVIbxLU-1713446868822)]

[外链图片转存中…(img-dHEEKQUa-1713446868823)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值