友情提示:
此博客较长 需要您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 估计也得一周左右的时间~~~
- 截断数组
*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 等数组 字符串的函数
FCC的进阶算法 是另外写一个博客
这篇写的太长不友好 影响各位大佬体验
that's all ~~~ 完结 ~~~ 撒花~~~ Damn!!!!