摘要:,黑色的主題風(fēng)格,很符合。時(shí)間復(fù)雜度雖然成功,但我明顯感覺代碼寫得不是很優(yōu)雅。這個(gè)是沒錯(cuò)的,但缺乏了宏觀的視角,會變得片面。但是不重要,關(guān)鍵是這個(gè)思想要學(xué)習(xí),可以應(yīng)用到其他地方。求和,大于就返回偶數(shù)的位置,否則返回奇數(shù)的位置。
前幾天做LeetCode上的大數(shù)乘法,代碼沒錯(cuò),可就是提交不成功,顯示SyntaxError: Unexpected token var
我把所有代碼都注釋掉,只留下return 1,依然報(bào)同樣的錯(cuò)誤。。。感覺LeetCode對JSer不是特別友好
剛剛在node社區(qū)看到有人推薦codewars,立馬去體驗(yàn)一番。注冊要寫個(gè)代碼測試一下身份,這個(gè)細(xì)節(jié)有意思(雖然代碼很簡單)。
codewars,黑色的主題風(fēng)格,很符合coder。而且可用語言非常廣,連TypeScript都有??!
然后codewars給我推薦了一題=>codewars-iqTest
這題雖然很簡單,但是很有意思,對我的啟發(fā)挺大的,讓我發(fā)現(xiàn)了自己的一些不足。
題目:意思就是要找出數(shù)串(不是數(shù)組,這是一個(gè)坑)中跟其他數(shù)不相同的一個(gè)數(shù)(奇偶方面)
我一開始的寫法是:以第一個(gè)數(shù)的奇偶性為標(biāo)準(zhǔn),后面的數(shù)跟這個(gè)標(biāo)準(zhǔn)一樣,那就返回之前記錄的一個(gè)跟這個(gè)標(biāo)準(zhǔn)不同的數(shù)的下標(biāo)(如果有的話)。如果跟這個(gè)標(biāo)準(zhǔn)不同,那就記錄下標(biāo)。這樣遍歷完之后就如果還沒有return,那結(jié)果就只能是第一個(gè)數(shù)或者最后一個(gè)數(shù)。判斷一下seen就知道是頭還是尾了。時(shí)間復(fù)雜度O(n)
function iqTest(numbers){ let number = numbers.split(" ") let tag = number[0]%2 let resIndex = "" let seen = false for(let i = 1, len = number.length; i < len; i++) { if(number[i]%2 === tag) { if(resIndex !== "") return resIndex+1 seen = true }else { resIndex = i } } return seen? resIndex + 1: 1 }
雖然成功AC,但我明顯感覺代碼寫得不是很優(yōu)雅。在評論區(qū)看到有人用兩個(gè)數(shù)組分別裝奇數(shù)偶數(shù),我恍然大悟,瞬間感覺自己宛如zz...我怎么一開始沒想到orz
這一題完全暴露了我的不足,讓我深思。遇到編程題,也許我更多地是在微觀上進(jìn)行思考,關(guān)注執(zhí)行流程的每個(gè)細(xì)節(jié),代碼怎么執(zhí)行。這個(gè)是沒錯(cuò)的,但缺乏了宏觀的視角,會變得片面。正所謂不識廬山真面目,只緣身在此山中,這一題如果宏觀上把奇偶剝離,那什么問題都解決了,簡直不要太簡單!!
function iqTest(numbers){ let number = numbers.split(" ") let odd = [],even = [] number.forEach((item,index) => { item % 2 == 0? even.push(index + 1): odd.push(index + 1) }) return odd.length === 1? odd[0]: even[0] }
短短幾行代碼,也是一次遍歷,時(shí)間復(fù)雜度O(n),這才是優(yōu)雅地寫代碼?。吹缴鐓^(qū)高票答案有用filter掃兩次,我覺得用forEach一次就夠了)
此外,AC之后還能看大佬們的代碼,按clever排序,看到了一下代碼:
看到這樣的代碼,我真的有點(diǎn)興奮,想法太妙了!雖然包含indexOf,一共遍歷了三遍。但是不重要,關(guān)鍵是這個(gè)思想要學(xué)習(xí),可以應(yīng)用到其他地方。
首先他用map將每個(gè)元素模2,這就像同化一樣,因?yàn)橹挥衅鏀?shù)和偶數(shù),所以先把奇數(shù)和偶數(shù)都分別同化成一個(gè)樣,0或1。求和,大于1就返回偶數(shù)的位置,否則返回奇數(shù)的位置。
不過我覺得reduce累加的步驟沒有必要,只要把前三個(gè)數(shù)加起來就知道不同的數(shù)的奇偶性,或者可以在第一次遍歷就記錄0或1的數(shù)量,省一次遍歷。
喜歡codewars,這里人個(gè)個(gè)都是人才,說話又好聽
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/108166.html
摘要:其實(shí)昨天晚上我看到最逗得一段代碼是這樣的,老外的創(chuàng)造力真是震古爍今啊,題目是寫一個(gè)函數(shù)查找素?cái)?shù)。 這兩天有點(diǎn)迷Codewars , 這上面的好處是獎(jiǎng)勵(lì)系統(tǒng),我為了升段位晚上像打游戲升級一樣的在做js習(xí)題,想想老外哪怕這簡單網(wǎng)站的任務(wù)系統(tǒng)做的可真夠好啊。 先給大家介紹第一道 六段題(一共8kyu,kyu上面還有dan,數(shù)字越小越難) 題目: 創(chuàng)造一個(gè)函數(shù),返回如下這么個(gè)玩意,參數(shù)...
摘要:問題描述驗(yàn)證方式題目理解函數(shù)處理一個(gè)參數(shù),一個(gè)字符串組。常量值,可以是任意合法的表達(dá)式。到字符串長度的一個(gè)整數(shù)??蛇x,用于指定連接每個(gè)數(shù)組元素的分隔符。分隔符會被轉(zhuǎn)成字符串類型如果省略的話,默認(rèn)為一個(gè)逗號。 [7 kyu]Substring fun ??2016.02.22 問題描述: showImg(http://ww1.sinaimg.cn/large/006m2mhTgw1f1p...
工作之余在codewars上看了一個(gè)問題,題目如下 寫一個(gè)正則,驗(yàn)證密碼,保證以下幾點(diǎn), 0.位數(shù)大于六 1.必須包含小寫字母 2.必須包含大寫字母 3.必須包含數(shù)字 好吧,我搞了半天沒搞出來,各位看官,你們知道怎么解嗎? 答案我參考了google,使用一條正則表達(dá)式是這樣的 function validate(password) ...
摘要:發(fā)現(xiàn)一個(gè)很好的練習(xí)做題網(wǎng)站都是自己做過的,先放自己的答案,再放自己覺得不錯(cuò)的其他回答。 發(fā)現(xiàn)一個(gè)很好的練習(xí)做題網(wǎng)站 Codewars 都是自己做過的,先放自己的答案,再放自己覺得不錯(cuò)的其他回答。 1. 將首字母放到后面并加上ay pigIt(This is my string)轉(zhuǎn)換成:pigIt(hisTay siay ymay tringsay) mine function...
摘要:你這小孩看到長輩怎么不打招呼怪獸的屬性怪獸的技能無大木博士的圖鑒把它函數(shù)弄好來,讓他可以好好地歡迎客人戰(zhàn)斗記錄儀回放注解訪問對象的屬性。在通過來調(diào)用函數(shù)調(diào)用對象。失誤并不是全局對象。國際戰(zhàn)場的經(jīng)典錄像不需。 [8 kyu]Broken Greetings 你這小孩看到長輩怎么不打招呼??2016.03.15 怪獸的屬性: showImg(http://ww3.sinaimg.cn/la...
閱讀 2690·2021-11-08 13:16
閱讀 2367·2021-10-18 13:30
閱讀 2237·2021-09-27 13:35
閱讀 1993·2019-08-30 15:55
閱讀 2442·2019-08-30 13:22
閱讀 576·2019-08-30 11:24
閱讀 2077·2019-08-29 12:33
閱讀 1813·2019-08-26 12:10