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

友情提示:
此博客較長 需要您8-12分鐘時間閱讀 有FCC的初級算法題 和 一些有的沒的分享
另外中級篇 每天一個js小算法(日更 21天) - V 2.0 也寫完了
有些題忘記加注釋了 后續(xù)會加上的

今天2018-7-23寫代碼的時候 處理定時器相關代碼的時候遇到一很基本的算法 卡了很久 很氣 相當氣 開始思考為什么自己這么傻?甚至開始懷疑人生...
為什么寫不出來? 焦慮感油然而生 覺得自己很有必要提升下簡單以及基本的算法能力

:"這個好簡單應該可以實現(xiàn)" (就這么過了三個小時 一動不動 腰都快斷了)
內(nèi)心的自己:"你是真的好傻 這么簡單的東西寫這么久?"(然后開始找別人的代碼,好高大上)
:"怎么別人這么牛p 我為什么就寫不出來呢?"
內(nèi)心的自己:"沒事兒 人家經(jīng)驗比你豐富而已" (開始安慰自己)
:"不行不行 還是基礎太差 才會導致這樣的問題 我要重新在來一遍就當是復習了"
內(nèi)心的自己:"shit 這么做很累的 累死你 腰椎出了問題 活該??????????"
:"Whatever"

就這樣跟自己做了很久得斗爭 開始找有沒有可以學習或者練習基本算法的學習平臺或者課程
有很多推薦的我就例舉幾個 其他的請各位自行百度

首選 其他
- CodeWar codewar - Leecode Leecode很多大神都用這個去刷題 我只是聽說但從未刷過一道題
- FCC freecodecamp - 考研的同學刷機試題 ???/a> 求職的同學還可以刷面試題 很牛皮

有哪些學習算法的網(wǎng)站推薦?
另外看到了其他幾個聽說超級有用不知真假
geeksforgeeks
一個小學生的算法競賽題庫
Lintcode 這個我逛了逛也可以的
看了以上幾個網(wǎng)站以及回答 我選擇了之前寫過一些東西的FCC 因為都是基礎的 也不想一步登天且這種白日夢不存在的 so 腳踏實地的開始

規(guī)則如下:

  1. 如果當天不完成或者各種理由推拖了 次日補
  2. 不能找答案(原則性問題不得觸犯) 沒能做出來或?qū)崿F(xiàn)時間影響了日常工作 作為標記跳過 以后再來刷
  3. 解決思路+代碼注釋
    if 但凡是觸犯了以上任意規(guī)則 自動退出 不在更新 發(fā)朋友圈一張自己最丑的圖且截圖放到此Blog (女人...不對...男人就要對自己狠一點)

開始時間 - 結(jié)束時間

不求數(shù)量 但求質(zhì)量

為了以后寫代碼順暢些 沒別的愿景 因為一旦卡住我腦子就會陷入一種很難描述的情況
抓狂+1000個黑人問號臉 => 百度 => change code =>百度 的死循環(huán)
每次都是到了第二天腦子順暢的時候一會兒就實現(xiàn)了 這種現(xiàn)象我表示很迷

  • 反轉(zhuǎn)一個整數(shù) 支持負數(shù)了 之前沒想到
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 實現(xiàn)階乘(遞歸)

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中午休息寫兩個 感覺不錯 睡會兒 下午繼續(xù)偷摸er的寫 被領導發(fā)現(xiàn)又得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 今天估計得住這兒了
之所以留這兒 是因為項目拖了兩天 客戶又急
哎 小公司就是受人欺負 客戶一句話 我就得加班
也怪自己白天凈干些沒用的 哈哈哈哈 不說了繼續(xù)繼續(xù)
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 返回數(shù)組中最大的數(shù) 其實還有一種就是用for循環(huán) 但是我懶 不想寫了
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]]);

以上題目看似很簡單(實際上也很簡單) 但就是實現(xiàn)不出來 憋半天憋一道題 心累 繼續(xù)繼續(xù)

6 判斷字符串是否是指定字符結(jié)尾 這只是一種思路 我這個有點過去簡單粗暴了 小伙伴們?nèi)绻懈啻鸢?可以留言 探討下 我是戰(zhàn)五渣 所以見諒
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 重復字符串指定次數(shù) 這個折騰了一會兒 剛開始得保存一次 沒想到
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點多 客戶看完覺得還可以就睡了 今天不知道客戶還會有什么神奇古怪的需求 我快寫成一套系統(tǒng)了?? 繼續(xù)繼續(xù)...

  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. 指定數(shù)目 分割數(shù)組
    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
手機碼字 今天下午 到點就走沒加班,太累 忘記在簡書繼續(xù)寫下去 ???
沒有筆記本 就只能手機碼字 剛在看書《一個孤獨漫步者的遐想》當然這部分跟標題嚴重不符 只想寫出來分享記錄下裝逼

封面

不,你不想

我渴望學習是為了認知自我,不是為了教育他人;我一直認為教導別人之前必須了解自己 ——盧梭

而我恰恰是 為了養(yǎng)活自己
墻裂安利個app timing 最有用的就是番茄時間管理 25分鐘放下所有事情專注于一件事 簡單粗暴高效
或者自己寫個小程序給自個兒用 裝個逼

手機上不去FCC有點可惜
說了挺多跟標題不符的東西
其實就是為了記錄給自己看
改變一種知識分享的方式,加入自己的東西和想法就會產(chǎn)生更容易更傾向于分享的心態(tài) 我覺得是雙利
一個自己形成記錄的習慣,二來別人也能得到自己想要的部分 挺好


7-26

10:30:15 我找到了《js語言精粹》pdf 準備看這本書了 171頁 還算可以 一天50頁就3天看完了(這特么都是P話) 所以我也不知道要花多久 看完了我就寫個blog 估計也得一周左右的時間~~~

171頁

  1. 截斷數(shù)組

*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 中午午休 繼續(xù)寫

  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. 過濾數(shù)組中 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. 銷毀數(shù)組中指定的值 [1,2,3],2,3 它跟我想的還不一樣 我是想把除了第一項之外的參數(shù)全部push進一個新的數(shù)組
    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. 數(shù)組排序并找出元素索引
    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);

這個就很快
今日總結(jié):filter() indexOf() 非常讓我頭疼 我在找?guī)讉€場景練習一下 真的好痛苦 一道題解將近一個小時
arguments | arr.filter | Boolean | arr.indexOf | str.slice | str.substr | | arr.slice | arr.splice 今天就涉及到這么多
20:35:12 回家回家 太晚了 餓死了

7-27

10:04:58 有個問題簡單處理了一下就是定時器的暫停繼續(xù) 又有新需求改了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 回家回家 明天繼續(xù)
FCC的初級算法over
能力有沒有提升我到?jīng)]什么感覺 就是比較詳細的知道了filter 等數(shù)組 字符串的函數(shù)
FCC的進階算法 是另外寫一個博客
這篇寫的太長不友好 影響各位大佬體驗
that's all ~~~ 完結(jié) ~~~ 撒花~~~ Damn!!!!

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,881評論 25 709
  • 我是個很懦弱無能的人,不甘于現(xiàn)狀,卻又不努力去改變。這句話盡管我說過很多次,可是卻一次也沒有去改變過,因為如果有一...
    林里葉落閱讀 328評論 1 4
  • 天意的重要性 拿破侖用兵勝算往往達百分之九十九,他說:還有那一小部分是天意。 可是,硬幣是兩面的,拿破侖也才看清這...
    司馬遠九郎閱讀 749評論 0 1
  • 明天就是七夕,對于有男朋友,幸福的他們或許是個完美的一天。但是對于沒有找到以后的“他”的我們應該怎么過,有的人就像...
    冰驕也傲閱讀 248評論 0 0
  • 不會日本網(wǎng)絡用語,如何和11區(qū)網(wǎng)友們愉快地聊天呢?除了掌握基本日語口語外,我們還要認識一些日本網(wǎng)絡用語。在本篇文章...
    悠悠飄落葉閱讀 1,085評論 0 0

友情鏈接更多精彩內(nèi)容