【Java】【JS】LeetCode - 快慢指针 - 哈希表 - # 202 快乐

Set hash = new HashSet<>(); // 哈希表存储

while(n!=1&&!hash.contains(n)){ // n不为1 & n不在表中

hash.add(n);

n = getNext(n); // 继续计算

}

return n == 1;

}

public int getNext(int n){ // 计算下一个数,求平方和

int total = 0;

while(n > 0){

int d = n % 10;

n = n / 10;

total = total + d*d;

}

return total;

}

}

/**

  • @param {number} n

  • @return {boolean}

*/

var isHappy = function(n) {

if(n === 1)

return true;

const list = new Set();

while(!list.has(n)){

list.add(n);

n = next(n);

}

return n===1;

};

function next(n){

n = n + ‘’

let sum = 0

for(let num of n){

sum += num * num

}

return sum

}

方法二:快慢指针遍历(弗洛伊德循环查找算法

那么这个问题后半部分可以转换为检测一个链表是否有环。因此我们在这里可以使用弗洛伊德循环查找算法。这个算法是两个奔跑选手,一个跑的快,一个跑得慢。在龟兔赛跑的寓言中,跑的快的称为 “乌龟”,跑得快的称为 “兔子”。

不管乌龟和兔子在循环中从哪里开始,它们最终都会相遇。这是因为兔子每走一步就向乌龟靠近一个节点(在它们的移动方向上)。

在算法的每一步中,慢速在链表中前进 1 个节点,快跑者前进 2 个节点(对 getNext(n) 函数的嵌套调用)。(1)如果 n 是一个快乐数,即没有循环,那么快跑者最终会比慢跑者先到达数字 1。(2)如果 n 不是一个快乐的数字,那么最终快跑者和慢跑者将在同一个数字上相遇。

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

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

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

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

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

总结

其他的内容都可以按照路线图里面整理出来的知识点逐一去熟悉,学习,消化,不建议你去看书学习,最好是多看一些视频,把不懂地方反复看,学习了一节视频内容第二天一定要去复习,并总结成思维导图,形成树状知识网络结构,方便日后复习。

这里还有一份很不错的《Java基础核心总结笔记》,特意跟大家分享出来

目录:

部分内容截图:

(img-nB1Y5Cid-1711161889503)]

部分内容截图:

[外链图片转存中…(img-NbePsh1v-1711161889503)]

[外链图片转存中…(img-zBCO5qRe-1711161889504)]

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值