Intermediate Algorithm Scripting

堅(jiān)持又把FCC中級算法刷了一遍股囊,很有價(jià)值。尤其是很多思維方式的提升床玻,以及正則的運(yùn)用也更加熟練毁涉。題目又點(diǎn)多21道。不一定全寫锈死,因?yàn)橛械念}太簡單贫堰,也沒有什么知識點(diǎn)可講穆壕。但序號還說按照題目本身來給,望見諒其屏。(解析也不想寫喇勋,怪自己太懶...)有疑惑歡迎留言喔!
2.Diff Two Arrays

比較兩個(gè)數(shù)組偎行,然后返回一個(gè)新數(shù)組川背,該數(shù)組的元素為兩個(gè)給定數(shù)組中所有獨(dú)有的數(shù)組元素。換言之蛤袒,返回兩個(gè)數(shù)組的差異熄云。
["andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"] 應(yīng)該返回 ["diorite", "pink wool"] [1, "calf", 3, "piglet"], [1, "calf", 3, 4] 應(yīng)該返回 ["piglet", 4]

//解析:把兩個(gè)數(shù)組先合并,過濾掉原數(shù)組都存在的元素
function diffArray(arr1,arr2) {
  return arr1.concat(arr2).filter(e => !(arr1.includes(e) && arr2.includes(e)));
}

3.Roman Numeral Converter

將給定的數(shù)字轉(zhuǎn)換成羅馬數(shù)字

function convertToRoman(num) {
 var lookup ={M:1000,CM:900,D:500,CD:400,C:100,XC:90,L:50,XL:40,X:10,IX:9,V:5,IV:4,I:1};
 var romanStr = "";
 for (var i in lookup){
    while (num >= lookup[i]){
      romanStr+=i;
      num -= lookup[i];
    }
 }
 return romanStr;
}

4.Where art thou

寫一個(gè) function妙真,它遍歷一個(gè)對象數(shù)組(第一個(gè)參數(shù))并返回一個(gè)包含相匹配的屬性-值對(第二個(gè)參數(shù))的所有對象的數(shù)組缴允。如果返回的數(shù)組中包含 source 對象的屬性-值對,那么此對象的每一個(gè)屬性-值對都必須存在于 collection 的對象中珍德。

function whatIsInAName(collection, source) {
  var arr = [];
  for(var i = 0;i < collection.length;i++){
      var flag = true;
      for(var key2 in source){
          if (source[key2] !== collection[i][key2]){
              flag = false;
          }
      }
      if(flag){
          arr.push(collection[i]);
      }
  }
  return arr;
}

5.Search and Replace

使用給定的參數(shù)對句子執(zhí)行一次查找和替換练般,然后返回新句子。
第一個(gè)參數(shù)是將要對其執(zhí)行查找和替換的句子锈候。
第二個(gè)參數(shù)是將被替換掉的單詞(替換前的單詞)薄料。
第三個(gè)參數(shù)用于替換第二個(gè)參數(shù)(替換后的單詞)。
注意:替換時(shí)保持原單詞的大小寫泵琳。例如摄职,如果你想用單詞 "dog" 替換單詞 "Book" ,你應(yīng)該替換成 "Dog"虑稼。

function myReplace(str, before, after) {
  var newstr = before[0] !== before[0].toUpperCase() ? after :          (after[0].toUpperCase()+after.slice(1)); 
  return str.replace(new RegExp(before), newstr);
}

6.Pig Latin

把一個(gè)英文單詞的第一個(gè)輔音或輔音叢(consonant cluster)移到詞尾琳钉,然后加上后綴 "ay"。
如果單詞以元音開始蛛倦,你只需要在詞尾添加 "way" 就可以了歌懒。

function translatePigLatin(str) {
    str = str.replace(/^([aeiou][a-z]*)$/gi, "$1way"); // 表示,如果開頭為aeiou溯壶,那么尾部加上way
    str = str.replace(/^([^aeiou]+)([a-z]*)$/gi, "$2$1ay");// 如果開頭為輔音及皂,第二部分——第一部分——ay
    return str;
}

8.Missing letters

從傳遞進(jìn)來的字母序列中找到缺失的字母并返回它。
如果所有字母都在序列中且改,返回 undefined验烧。

function fearNotLetter(str) {
  if(str.charCodeAt(str.length-1) - str.charCodeAt(0) === str.length-1){
    return undefined;
  }else{
    for(var i = 0; i < str.length; i++){
      if(str.charCodeAt(i+1) - str.charCodeAt(i) !== 1){
        return String.fromCharCode(str.charCodeAt(i)+1);
      }
    }
  }
}

10.Sorted Union

寫一個(gè) function,傳入兩個(gè)或兩個(gè)以上的數(shù)組又跛,返回一個(gè)以給定的原始數(shù)組排序的不包含重復(fù)值的新數(shù)組碍拆。
換句話說,所有數(shù)組中的所有值都應(yīng)該以原始順序被包含在內(nèi),但是在最終的數(shù)組中不包含重復(fù)值感混。
非重復(fù)的數(shù)字應(yīng)該以它們原始的順序排序端幼,但最終的數(shù)組不應(yīng)該以數(shù)字順序排序。

function uniteUnique(...arr) {
  return arr.reduce(function(prev,next){
    return prev.concat(next.filter(e => !prev.includes(e)));
  });
}

12.Spinal Tap Case

將字符串轉(zhuǎn)換為 spinal case弧满。Spinal case 是 all-lowercase-words-joined-by-dashes 這種形式的婆跑,也就是以連字符連接所有小寫單詞。

function spinalCase(str) {
  str = str.replace(/([a-z])([A-Z])/g, '$1 $2');
  return str.replace(/\s|_/g, '-').toLowerCase();
}

13.Sum All Odd Fibonacci Numbers

給一個(gè)正整數(shù)num庭呜,返回小于或等于num的斐波納契奇數(shù)之和滑进。
斐波納契數(shù)列中的前幾個(gè)數(shù)字是 1、1募谎、2扶关、3、5 和 8近哟,隨后的每一個(gè)數(shù)字都是前兩個(gè)數(shù)字之和驮审。
例如,sumFibs(4)應(yīng)該返回 5吉执,因?yàn)殪巢{契數(shù)列中所有小于4的奇數(shù)是 1、1地来、3戳玫。
提示:此題不能用遞歸來實(shí)現(xiàn)斐波納契數(shù)列。因?yàn)楫?dāng)num較大時(shí)未斑,內(nèi)存會溢出咕宿,推薦用數(shù)組來實(shí)現(xiàn)。

function sumFibs(num) {
  var prev = 0, next = 1,  n = 1,  res = 0;
  while(next <= num){
    if(n % 2 !== 0){
      res += n;
    }
    n = prev + next;
    prev = next;
    next = n; 
  }
  return res;
}

14.Sum All Primes

求小于等于給定數(shù)值的質(zhì)數(shù)之和蜡秽。
只有 1 和它本身兩個(gè)約數(shù)的數(shù)叫質(zhì)數(shù)府阀。例如,2 是質(zhì)數(shù)芽突,因?yàn)樗荒鼙?1 和 2 整除试浙。1 不是質(zhì)數(shù),因?yàn)樗荒鼙蛔陨碚?br> 給定的數(shù)不一定是質(zhì)數(shù)寞蚌。

function sumPrimes(num) {
  var res = 0;
  for(var n = 1; n <= num; n++){
    for(var m = 2; m < n; m++){
      if(n % m === 0){
        break;
      }
    }
    if(n === m){
      res +=m;
    }
  }
  return res;
}

15.Smallest Common Multiple

找出能被兩個(gè)給定參數(shù)和它們之間的連續(xù)數(shù)字整除的最小公倍數(shù)田巴。
范圍是兩個(gè)數(shù)字構(gòu)成的數(shù)組,兩個(gè)數(shù)字不一定按數(shù)字順序排序挟秤。
例如對 1 和 3 —— 找出能被 1 和 3 和它們之間所有數(shù)字整除的最小公倍數(shù)壹哺。

function smallestCommons(arr) {
  var temp = [];
  var min = Math.min(arr[0],arr[1]);
  var max = Math.max(arr[0],arr[1]);
  for(var i = min; i <= max; i++) {
    temp.push(i);
  }
  var gcd = function(a,b) {
    return b ? gcd(b, a % b) : a;
  };
  
  return temp.reduce(function(prev,cur) {
    return prev*cur/gcd(prev,cur);
  });
}

17.Drop it

從前面刪除數(shù)組第一個(gè)參數(shù)的元素,直到第二個(gè)參數(shù)返回true艘刚。
第二個(gè)參數(shù)func是一個(gè)函數(shù)管宵,用于測試數(shù)組的第一個(gè)元素,以決定是否應(yīng)該刪除它。
返回?cái)?shù)組的其余部分箩朴,否則返回一個(gè)空數(shù)組岗喉。

function dropElements(arr, func) {
  return arr.slice(arr.findIndex(func) >= 0 ? arr.findIndex(func) : arr.length, arr.length);
}

18.Steamroller

對嵌套的數(shù)組進(jìn)行扁平化處理。你必須考慮到不同層級的嵌套隧饼。

function steamrollArray(arr) {
  return arr.reduce(function(prev, next){
    return prev.concat(Array.isArray(next) ? steamrollArray(next) : next);
  }, []);
}

19.Everything Be True

如果集合(collection)中的所有對象都存在對應(yīng)的屬性(pre)沈堡,并且屬性(pre)對應(yīng)的值為真。函數(shù)返回ture燕雁。反之诞丽,返回false。

function truthCheck(collection, pre) {
  return collection.every(function(e){
    return e[pre];
  });
}

20.Arguments Optional

創(chuàng)建一個(gè)計(jì)算兩個(gè)參數(shù)之和的 function拐格。如果只有一個(gè)參數(shù)僧免,則返回一個(gè) function,該 function 請求一個(gè)參數(shù)然后返回求和的結(jié)果捏浊。
例如懂衩,add(2, 3) 應(yīng)該返回 5,而 add(2) 應(yīng)該返回一個(gè) function金踪。
調(diào)用這個(gè)有一個(gè)參數(shù)的返回的 function浊洞,返回求和的結(jié)果:
var sumTwoAnd = add(2);
sumTwoAnd(3) 返回 5。
如果兩個(gè)參數(shù)都不是有效的數(shù)字胡岔,則返回 undefined法希。

function addTogether() {
  var args = Array.from(arguments);
  return args.some(n => typeof n !== 'number') ? undefined 
         : args.length > 1 ?
         args.reduce((prev, next) => prev += next, 0) : (n) => typeof n === "number" ? 
         n + args[0] : undefined;
}
addTogether(2,3);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市靶瘸,隨后出現(xiàn)的幾起案子苫亦,更是在濱河造成了極大的恐慌,老刑警劉巖怨咪,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屋剑,死亡現(xiàn)場離奇詭異,居然都是意外死亡诗眨,警方通過查閱死者的電腦和手機(jī)唉匾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辽话,“玉大人肄鸽,你說我怎么就攤上這事∮推。” “怎么了典徘?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長益咬。 經(jīng)常有香客問我逮诲,道長帜平,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任梅鹦,我火速辦了婚禮裆甩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘齐唆。我一直安慰自己嗤栓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布箍邮。 她就那樣靜靜地躺著茉帅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锭弊。 梳的紋絲不亂的頭發(fā)上堪澎,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機(jī)與錄音味滞,去河邊找鬼樱蛤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛剑鞍,可吹牛的內(nèi)容都是我干的昨凡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蚁署,長吁一口氣:“原來是場噩夢啊……” “哼土匀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起形用,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎证杭,沒想到半個(gè)月后田度,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡解愤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年镇饺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片送讲。...
    茶點(diǎn)故事閱讀 39,992評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奸笤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哼鬓,到底是詐尸還是另有隱情监右,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布异希,位于F島的核電站健盒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜扣癣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一惰帽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧父虑,春花似錦该酗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至航邢,卻和暖如春耕赘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背膳殷。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工操骡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赚窃。 一個(gè)月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓册招,卻偏偏與公主長得像,于是被迫代替她去往敵國和親勒极。 傳聞我的和親對象是個(gè)殘疾皇子是掰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,234評論 0 4
  • 1、區(qū)間求值算法(Sum All Numbers in a Range) 我們會傳遞給你一個(gè)包含兩個(gè)數(shù)字的數(shù)組辱匿。返...
    Iris_mao閱讀 1,556評論 0 2
  • 文/弋逝水 ——灑脫如叔夜键痛,越名教而任自然。 也許匾七,大多人對嵇康的熟悉絮短,多是片面不祥的。 大多是從絕響《廣陵散》得...
    高白牧閱讀 697評論 0 1
  • 又到年底席里,是休年假的時(shí)候了。 北方天寒地凍加霧霾拢驾,海南氣候好奖磁,可最近老有臺風(fēng)。 云南咋樣独旷?同學(xué)署穗。 云南寥裂?不錯(cuò)。 待...
    ibolomi閱讀 416評論 1 0