为了账号安全,请及时绑定邮箱和手机立即绑定

每天一个js小算法(日更 21天)

标签:
JavaScript

友情提示:
此博客较长 需要您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 (女人...不对...男人就要对自己狠一点)

开始时间 - 结束时间

webp

不求数量 但求质量

为了以后写代码顺畅些 没别的愿景 因为一旦卡住我脑子就会陷入一种很难描述的情况
抓狂+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
手机码字 今天下午 到点就走没加班,太累 忘记在简书继续写下去
没有笔记本 就只能手机码字  刚在看书《一个孤独漫步者的遐想》当然这部分跟标题严重不符 只想写出来分享记录下装逼

webp

封面


webp

不,你不想

我渴望学习是为了认知自我,不是为了教育他人;我一直认为教导别人之前必须了解自己       ——卢梭

而我恰恰是 为了养活自己
墙裂安利个app timing 最有用的就是番茄时间管理 25分钟放下所有事情专注于一件事 简单粗暴高效
或者自己写个小程序给自个儿用 装个逼

手机上不去FCC有点可惜
说了挺多跟标题不符的东西
其实就是为了记录给自己看
改变一种知识分享的方式,加入自己的东西和想法就会产生更容易更倾向于分享的心态 我觉得是双利
一个自己形成记录的习惯,二来别人也能得到自己想要的部分 挺好


webp

7-26

10:30:15 我找到了《js语言精粹》pdf 准备看这本书了 171页 还算可以 一天50页就3天看完了(这特么都是P话)  所以我也不知道要花多久 看完了我就写个blog 估计也得一周左右的时间~~~

webp

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页 闭包


webp

20:39:43 回家回家 明天继续
FCC的初级算法over
能力有没有提升我到没什么感觉 就是比较详细的知道了filter 等数组 字符串的函数
that's all ~~~ 完结 ~~~ 撒花~~~ Damn!!!!



作者:zz77zz
链接:https://www.jianshu.com/p/a967014dbe6e


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消