每天一个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 脚踏实地的开始

规则如下:

  1. 如果当天不完成或者各种理由推拖了 次日补
  2. 不能找答案(原则性问题不得触犯) 没能做出来或实现时间影响了日常工作 作为标记跳过 以后再来刷
  3. 解决思路+代码注释
    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点多 客户看完觉得还可以就睡了 今天不知道客户还会有什么神奇古怪的需求 我快写成一套系统了🤐 继续继续...

  1. 截断字符串
    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写成日记 我也是服了自己

  1. 指定数目 分割数组
    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页

  1. 截断数组

*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 中午午休 继续写

  1. 比较字符串 后者是不是前者的子集 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"]);
  1. 过滤数组中 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. 销毁数组中指定的值 [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() 真的花了我很久 很懊恼 多练练

  1. 数组排序并找出元素索引
    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次 活活把我弄死

  1. 凯撒密码 移位密码。
    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!!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,825评论 25 707
  • 我是个很懦弱无能的人,不甘于现状,却又不努力去改变。这句话尽管我说过很多次,可是却一次也没有去改变过,因为如果有一...
    林里叶落阅读 307评论 1 4
  • 天意的重要性 拿破仑用兵胜算往往达百分之九十九,他说:还有那一小部分是天意。 可是,硬币是两面的,拿破仑也才看清这...
    司马远九郎阅读 616评论 0 1
  • 明天就是七夕,对于有男朋友,幸福的他们或许是个完美的一天。但是对于没有找到以后的“他”的我们应该怎么过,有的人就像...
    冰骄也傲阅读 214评论 0 0
  • 不会日本网络用语,如何和11区网友们愉快地聊天呢?除了掌握基本日语口语外,我们还要认识一些日本网络用语。在本篇文章...
    悠悠飘落叶阅读 644评论 0 0