今天写算法的时候、通过两道题深深意识到了,什么是优雅的代码(应该说不按套路出牌的代码)
我被折服了
第一个就是141. 环形链表 - 力扣(LeetCode)
判断换环状链表
我的思路就是用快慢指针判断,非常平平无奇
然后看到高手的题解了,真的就如标题一般天秀
我的评价
看看大神的解法
1.JSON.stringify(head) 秒杀法😃
除非不报错,报错就是有环!!
var hasCycle = function (head) {try {JSON.stringify(head)} catch{return true}return false
};
2.标记法
给遍历过的节点打记号,如果遍历过程中遇到有记号的说明已环🤓
const hasCycle = function(head) {while (head) {if (head.tag) {return true;}head.tag = true;head = head.next;}return false;
};
3.鸡贼法
题目说了范围不超过100000,没超过size能发现空节点就是没有环, 超过了就是有环!!!
const hasCycle = function(head) {let i = 0, size = 100000let node = headwhile (++i <= size) {if(!node) return falsenode = node.next}return true;
};
天才,真是天才,这三种都秀到我了,尤其是第一种,脑子发麻
我见天才,就如浮游见青天一般
第二道
242. 有效的字母异位词 - 力扣(LeetCode)
简单题,有很多方法,怎么优雅怎么来,
var isAnagram = function(s, t) {
let a=[...s].sort().join("")
let b=[...t].sort().join("")return a==b?true:false;
};
结果官方的更优雅
var isAnagram = function(s, t) {return s.length == t.length && [...s].sort().join('') === [...t].sort().join('')
};
逻辑一样,但是人家更优雅呀,表示比不上
感受:以前写项目什么的没意识到什么是优雅,反正就知道自己写的一般,有的地方写的还很繁琐,后面看书看到一句话,高级的程序员写的代码要么所有人都看的懂,要么所有人都看不懂,及今天又看到了这些脑洞,真是感觉人外有人,天外有天,真T-m优雅呀,太厉害了,希望自己也能努力写出优雅的代码