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的机会,目的性不够强时学习的效率真是不高。。
- 另外我还需要搭建一个个人博客吧,一直是待办项。。。这个同事也有做,可以学习一下。不过某人说这个必要性不是很大。那就把毕设的项目搭到服务器上吧。