每天一个js小算法(日更 21天)
友情提示:
此博客较长 需要您8-12分钟时间阅读 有FCC的初级算法题 和 一些有的没的分享
另外每天一个js小算法(日更 21天) - V 2.0 也写完了这是中级篇 这篇看完的同学推荐大家看看,有些题忘记加注释了 后续会加上的
今天
2018-7-23
写代码的时候 处理定时器相关代码的时候遇到一个很基本的算法 卡住了很久 很气 相当气 然后开始思考为什么自己这么傻?
为什么自己写不出来然后意象不到的焦虑感油然而生 我怎么连这么简单的**都不会 然后冷静了下 觉得自己很有必要提升下简单以及基本的算法能力
我:"
这个好简单应该可以实现
" (就这么过了三个小时 一动不动 腰都快断了)
内心的自己:"你是真的好傻 这么简单的东西写这么久?
"(然后开始找别人的代码,好高大上)
我:"怎么别人这么牛p 我为什么就写不出来呢?
"
内心的自己:"没事儿 人家经验比你丰富而已
" (开始安慰自己)
我:"不行不行 还是基础太差 才会导致这样的问题 我要重新在来一遍就当是复习了
"
内心的自己:"shit 这么做很累的 累死你 腰椎出了问题 活该?????
"
我:"Whatever
"
就这样跟自己做了很久得斗争 开始找有没有可以学习或者练习基本算法的学习平台或者课程
有很多推荐的我就例举几个 其他的请各位自行百度
首选 | 其他 |
---|---|
- CodeWar codewar | - Leecode Leecode很多大神都用这个去刷题 我只是听说但从未刷过一道题 |
- FCC freecodecamp | - 考研的同学刷机试题 牛客 求职的同学还可以刷面试题 很牛皮 |
有哪些学习算法的网站推荐?
另外看到了其他几个听说超级有用不知真假
geeksforgeeks
一个小学生的算法竞赛题库
Lintcode 这个我逛了逛也可以的
看了以上几个网站以及回答 我选择了之前写过一些东西的FCC 因为都是基础的 也不想一步登天且这种白日梦不存在的 so 脚踏实地的开始
规则如下:
如果当天不完成或者各种理由推拖了 次日补
不能找答案(
原则性问题不得触犯
) 没能做出来或实现时间影响了日常工作 作为标记跳过 以后再来刷解决思路+代码注释
if 但凡是触犯了以上任意规则 自动退出 不在更新 发朋友圈一张自己最丑的图且截图放到此Blog
(女人...不对...男人就要对自己狠一点)
开始时间 - 结束时间
不求数量 但求质量
为了以后写代码顺畅些 没别的愿景 因为一旦卡住我脑子就会陷入一种很难描述的情况抓狂+1000个黑人问号脸 => 百度 => change code =>百度 的死循环
每次都是到了第二天脑子顺畅的时候一会儿就实现了 这种现象我表示很迷
反转一个整数 支持负数了 之前没想到
const reverseInteger = function (number) { var str = String(number) if(str.length>9) return 0 if(str.charAt(0) == "-"){ var str_r = String(number).substr(1,str.length) return parseInt("-"+str.split("").reverse().join("")) } return parseInt(str.split("").reverse().join("")) } reverseInteger(-123)
7月24日
1 实现阶乘(递归)
function factorialize(num) { if (num < 0) { return -1; } else if (num === 0 || num === 1) { return 1; } else { return (num * factorialize(num - 1)); } } factorialize(5);
2 回文 - 正念反念都一样
function palindrome(str) { var new_str = str.replace(/[^a-zA-Z0-9]/g,'').toLowerCase().split(''); return new_str.join('') === new_str.reverse().join('')? true : false; } palindrome("never odd or even");
7月24日14:34:24
中午休息写两个 感觉不错 睡会儿 下午继续偷摸er的写 被领导发现又得bulabulabula...
?????
3 找出最长单词 这个有很多种解决办法 我只是用了个蠢一点最早想到的方法
Find the Longest Word in a String
function findLongestWord(str) { // 请把你的代码写在这里 var new_str = str.split(" "); var arr = []; for(var i = 0;i<new_str.length;i++){ arr.push(new_str[i].length); } return arr.sort(function(a,b){ return b-a; })[0]; } findLongestWord("The quick brown fox jumped over the lazy dog");
2018年7月24日23:30:53
这么晚了还没回家呢 fuck 今天估计得住这儿了
之所以留这儿 是因为项目拖了两天 客户又急
哎 小公司就是受人欺负 客户一句话 我就得加班
也怪自己白天净干些没用的 哈哈哈哈 不说了继续继续
4 string 里的每个单词首字母大写
Title Case a Sentence
function titleCase(str) { return str.toLowerCase().split(" ").map((item)=>{ return item.replace(item.charAt(0),item[0].toUpperCase()) }).join(" ") } titleCase("I'm a little tea pot");
5 返回数组中最大的数 其实还有一种就是用for循环 但是我懒 不想写了
Return Largest Numbers in Arrays
function largestOfFour(arr) { // 请把你的代码写在这里 var new_arr = []; for(var i=0;i<arr.length;i++){ arr[i].sort(function(a,b){ return b-a; }); new_arr.push(arr[i][0]); } return new_arr; } largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
以上题目看似很简单(实际上也很简单) 但就是实现不出来 憋半天憋一道题 心累
继续继续
6 判断字符串是否是指定字符结尾 这只是一种思路
我这个有点过去简单粗暴了 小伙伴们如果有更多答案 可以留言 探讨下 我是战五渣 所以见谅
Confirm the Ending
function confirmEnding(str, target) { return (str.substr(-target.length)==target) ? true:false; } confirmEnding("He has to give me a new name", "name");
7 重复字符串指定次数 这个折腾了一会儿 刚开始得保存一次 没想到
Repeat a string repeat a string
function repeat(str, num) { if(num<=0) return ""; var save_ = str for(var i=1;i<num;i++) str+=save_ ; return str; } repeat("abc", 3);
7月25日
11:16:59
昨天完成了7个 今天未知 因为昨晚写到3点多 客户看完觉得还可以就睡了 今天不知道客户还会有什么神奇古怪的需求 我快写成一套系统了? 继续继续...
截断字符串
Truncate a string
function truncate(str, num) { if(num>=str.length) return str; if(num<=3) return str.slice(0,num)+"..."; if(str.length>num) return str.slice(0,num-3)+"..."; } truncate("Absolutely Longer", 2);
14:13:39
吃饭回来睡了一会儿 昨天这会儿还在写来着 估计是昨晚睡的太晚了 瞌睡的爆炸
友情提示: 别熬夜 一个blog写成日记 我也是服了自己
指定数目 分割数组
Chunky Monkey
function chunk(arr, size) { var new_arr = []; for(var i=0; i<arr.length; i+=size){ new_arr.push(arr.slice(i,i+size)); } return new_arr; } chunk(["a", "b", "c", "d","e"], 2);
23:10
手机码字 今天下午 到点就走没加班,太累 忘记在简书继续写下去
没有笔记本 就只能手机码字 刚在看书《一个孤独漫步者的遐想》当然这部分跟标题严重不符 只想写出来分享记录下装逼
封面
不,你不想
我渴望学习是为了认知自我,不是为了教育他人;我一直认为教导别人之前必须了解自己 ——卢梭
而我恰恰是 为了养活自己
墙裂安利个app timing 最有用的就是番茄时间管理 25分钟放下所有事情专注于一件事 简单粗暴高效
或者自己写个小程序给自个儿用 装个逼
手机上不去FCC有点可惜
说了挺多跟标题不符的东西
其实就是为了记录给自己看
改变一种知识分享的方式,加入自己的东西和想法就会产生更容易更倾向于分享的心态 我觉得是双利
一个自己形成记录的习惯,二来别人也能得到自己想要的部分 挺好
7-26
10:30:15
我找到了《js语言精粹》pdf 准备看这本书了 171页 还算可以 一天50页就3天看完了(这特么都是P话) 所以我也不知道要花多久 看完了我就写个blog 估计也得一周左右的时间~~~
171页
截断数组
*Slasher Flick *
function slasher(arr, howMany) { var new_arr = []; if(howMany>arr.length) return []; if(howMany<arr.length) arr.splice(0,howMany); return arr; } slasher([1, 2, 3], 2);
13:05:33
中午午休 继续写
比较字符串 后者是不是前者的子集
abcd
,acd
这种 因为不熟练indexOf()的用法 花了挺长时间
Mutations
function mutation(arr) { var new_arr = []; for(var i = 0;i<arr.length;i++){ new_arr.push(arr[i].toLowerCase()); } var str1 = new_arr[0].split("");var str2 = new_arr[1].split("");for(var j = 0;j<str2.length;j++){ if(str1.indexOf(str2[j]) == -1) { return false } }return true} mutation(["hello", "neo"]);
过滤数组中
false null 0 "" undefined NaN
Falsy Bouncer
function bouncer(arr) { return arr.filter((item)=> Boolean(item)); } bouncer([7, "ate", 0, false, 9]);
19:07:51
下班时间到了 但是我想多完成两个在回家 今天在Vue里坑了太久时间 有太多东西不会我压根就不想学vue 等把基础打好了 用起来就会顺畅很多 也只能这么安慰自己的愚蠢了
销毁数组中指定的值
[1,2,3],2,3
它跟我想的还不一样 我是想把除了第一项之外的参数全部push进一个新的数组
Seek and Destroy
function destroyer(arr) { var destroy_arr = arguments[0]; var new_arr = []; for(var i=1;i<arguments.length;i++){ new_arr.push(arguments[i]); } return destroy_arr.filter((item)=>{ return new_arr.indexOf(item) == -1; }); } destroyer([1, 2, 3, 1, 2, 3], 2, 3);
花了半个多小时 去解一道题
filter() indexOf() 真的花了我很久 很懊恼 多练练
数组排序并找出元素索引
Where do I belong
function where(arr, num) { arr.push(num) arr.sort((a,b)=>{ return a-b }) return arr.indexOf(num) } where([3, 10, 5], 3);
这个就很快
今日总结:filter() indexOf() 非常让我头疼 我在找几个场景练习一下 真的好痛苦 一道题解将近一个小时arguments | arr.filter | Boolean | arr.indexOf | str.slice | str.substr | | arr.slice | arr.splice
今天就涉及到这么多20:35:12
回家回家 太晚了 饿死了
7-27
10:04:58
有个问题简单处理了一下就是定时器的暂停继续 又有新需求改了40次 活活把我弄死
凯撒密码 移位密码。
Caesars Cipher
function rot13(str) { var new_arr=[]; for(var i=0;i<str.length;i++){ if(str.charCodeAt(i)<65||str.charCodeAt(i)>90){ new_arr.push(str.charAt(i)); }else if(str.charCodeAt(i)>77){ new_arr.push(String.fromCharCode(str.charCodeAt(i)-13)); }else{ new_arr.push(String.fromCharCode(str.charCodeAt(i)+13)); } } return new_arr.join(""); } rot13("SERR PBQR PNZC");
19:47:11
今天看了很久《JavaScript语言精粹》
看到51页 闭包
20:39:43
回家回家 明天继续
FCC的初级算法over
能力有没有提升我到没什么感觉 就是比较详细的知道了filter 等数组 字符串的函数
that's all ~~~ 完结 ~~~ 撒花~~~ Damn!!!!
作者:zz77zz
链接:https://www.jianshu.com/p/a967014dbe6e
共同学习,写下你的评论
评论加载中...
作者其他优质文章