CodeWars
因爲基礎的薄弱,登錄了去年申請的CodeWars賬號開始刷題。初步感受到自己的能力從極弱變成弱,也算是有進步吧。
以下的題基本都是讓我記憶十分深刻的題,也幾乎都是超出獨立解決範圍的,特此記錄一下。的確我現在能感受到,如果沒有系統性複習的話,做了題就和沒做一樣。
- Sum of Pairs
給出一個整型數組 ints 和一個整數 s,在數組中找出兩個和爲 s 且步長最短的數並輸出。
Examples:
sum_pairs([11, 3, 7, 5], 10)
# ^--^ 3 + 7 = 10
== [3, 7]
sum_pairs([4, 3, 2, 3, 4], 6)
# ^-----^ 4 + 2 = 6, indices: 0, 2 *
# ^-----^ 3 + 3 = 6, indices: 1, 3
# ^-----^ 2 + 4 = 6, indices: 2, 4
# * entire pair is earlier, and therefore is the correct answer
== [4, 2]
sum_pairs([0, 0, -2, 3], 2)
# there are no pairs of values that can be added to produce 2.
== None/nil/undefined (Based on the language)
sum_pairs([10, 5, 2, 3, 7, 5], 10)
# ^-----------^ 5 + 5 = 10, indices: 1, 5
# ^--^ 3 + 7 = 10, indices: 3, 4 *
# * entire pair is earlier, and therefore is the correct answer
== [3, 7]
解決方案:
function sum_pairs(ints, s) {
let seen = new Set();
for (let i of ints) {
if (seen.has(s - i)) return [s - i, i];
seen.add(i);
}
}
使用了Set來保證步長最短以及運行時間。還可以用Object。
2.The Observed PIN
給出n位數字密碼,每個數字都有可能是鍵盤上相鄰的任何一個數字,求可能的組合。
鍵盤長這樣:
┌───┬───┬───┐
│ 1 │ 2 │ 3 │
├───┼───┼───┤
│ 4 │ 5 │ 6 │
├───┼───┼───┤
│ 7 │ 8 │ 9 │
└───┼───┼───┘
│ 0 │
└───┘
解決方案
function getPINs(observed) {
var template = [[0,8],[1,2,4],[2,1,3,5],[3,2,6],[4,1,5,7],[5,2,4,6,8],[6,3,5,9],[7,4,8],[8,5,0,9,7],[9,8,6]];
var res = [];
function func(str,step){
if(step>=observed.length){
res.push(str);
return;
}
else{
var obserIndex = parseInt(observed[step]);
for(var i = 0; i<template[obserIndex].length;i++)
func(str+template[observed[step]][i],step+1);
}
}
func("",0);
return res
}
這個問題實際上是求排列組合,這裏也用了遞歸的寫法。
寫codewars的時候很多
接觸的東西
工作中或是日常中經常會通過各種渠道接觸到碎片化的新知識(對我而言的新知識),說實話我並不知道該怎麼把他們消化成我自己的東西。
- node進程保護,linux的 forever;
- js中的apply call;
- 對相對定位、絕對定位的理解;
- 性能優化方面:分析運行時性能;
- 更高的CSS動畫性能 或者 使用translate代替絕對定位來得到更高的動畫性能,看不太懂。。。
- mongoDB命令(一些經常用到的):
mongo 進入mongodb shell
use room_show_service 查看庫room_show_service
show collections 查看所有集合名
db.project.find() 查看集合“project”裏的所有數據
db.project.remove({}) 刪除集合內所有數據
等等 - react適用的可resize組件,github以及其demo地址。
- git rebase?不是很明白。。。
- 最近手上兩本書:《深入React技術棧》、《算法競賽入門經典》,以及gitchat的三個電子課。。書沒怎麼看,電子課也沒怎麼喫透。。這知識不進腦子啊。。。
- 同事用TypeScript實現了簡易的React 有空學習一下。。另外人家github上還有小程序實現wy雲音樂之類的,感覺可以看看(不過這部分目前有點超出能力惹,哭)
- 說實話對promise then之類的真心不怎麼理解。。畢設的後臺代碼寫的層層嵌套,似乎那就是回調地獄?當時因爲趕工。。沒有優化(能用就行系列)。。感覺可以優化一下,另外這種情況可以用封裝方法解決嗎。
- webpack的使用至今沒懂,package.json文件的設置項就是天書吧。。畢設的webpack也不是我搭建的,感覺自己真的需要從頭開始一個項目。
- 之前某人說過想買一本linux命令大全之類的書。說實話我覺得linux的學習真的很重要,但是目前都沒有用到linux的機會,目的性不夠強時學習的效率真是不高。。
- 另外我還需要搭建一個個人博客吧,一直是待辦項。。。這個同事也有做,可以學習一下。不過某人說這個必要性不是很大。那就把畢設的項目搭到服務器上吧。