簡單算法

面試算法題四部曲:

  1. clarification(詢問題目細節(jié)旺入,邊界條件,可能的極端錯誤情況)绕娘。
  2. Possible Solutions (所有可能的解法都和面試官溝通一遍)
    • Compare time &space Complexity(時間&空間復雜度)
    • Optimal Solution (最優(yōu)解)
  3. Coding (寫代碼)
  4. Test Cases (寫測試用例)
  • 兩數(shù)之和
    題述:給定一個整數(shù)數(shù)組 nums 和一個目標值 target愚争,請你在該數(shù)組中找出和為目標值的那 兩個 整數(shù)渊跋,并返回他們的數(shù)組下標。
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    var temp = {};
    for(let i =0;i<nums.length;i++) {
        if(temp[nums[i]] >= 0) return [temp[nums[i]], i];
        else temp[target-nums[i]] = i;
    }
};
var intersection = function(nums1, nums2) {
    var set1 = new Set(nums1);
    var set2 = new Set(nums2);
    var res = [];
    
    for(let num of set1.values()){
        if(set2.has(num))
            res.push(num);
    }
    return res;
};

for...of... 循環(huán)在可迭代對象(包括 Array,Map男窟,Set盆赤,String,TypedArray歉眷,arguments 對象等等)上創(chuàng)建一個迭代循環(huán)牺六,調用自定義迭代鉤子,并為每個不同屬性的值執(zhí)行語句姥芥。

for...in... 循環(huán)語句以任意順序遍歷一個對象的除Symbol以外的可枚舉屬性兔乞。

  • 排序鏈表(148)
    在 O(n log n) 時間復雜度和常數(shù)級空間復雜度下,對鏈表進行排序凉唐。
    示例 1:
輸入: 4->2->1->3
輸出: 1->2->3->4

解題思路常見的歸并排序庸追,先將鏈表四分為二,二分為一(快慢指針)台囱,直接二分等方法淡溯,排序,然后再將已排序的分段鏈表合并簿训。

/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var sortList = function(head) {
  if(head === null) 
    return head;
  
  var len = 0;
  var p = head;
  while(p) {
    len++;
    p = p.next;
  }
  
  var newHead = sort(len);
  return newHead;
  
  function sort(len) {
    if(len === 1) {
      var temp = head;
      head = head.next;
      temp.next = null;
      return temp;
    }
    
    var leftHead = sort(parseInt(len/2));
    var rightHead = sort(len - parseInt(len/2));
    
    var newHead = merge(leftHead, rightHead);
    
    return newHead;
  }
  
  function merge(leftHead, rightHead) {
    var h = ListNode(-1);
    var cur = h;
    while(leftHead && rightHead) {
      if(leftHead.val <= rightHead.val) {
        cur.next = leftHead;
        leftHead = leftHead.next;
      }else {
        cur.next = rightHead;
        rightHead = rightHead.next;
      }
      
      cur = cur.next;
    }
    
    if(leftHead) {
      cur.next = leftHead;
    }
    if(rightHead) {
      cur.next = rightHead;
    }
    cur = h.next;
    h.next = null;
    return cur;
  }
};
  • 插入排序
    插入排序是遍歷數(shù)組中的每一個元素咱娶,并尋找到前一個比它小的數(shù),并插入該數(shù)后面强品。
function insertSort(arr) {
  for(var a = 1;a<arr.length;a++) {
    let key = arr[a];
    let temp = a-1;

    while(temp>0 && arr[temp]>key) {
      arr[temp+1] = arr[temp];
      temp -=1;
    }
    arr[temp+1] = key;    
  }
  return arr;
}

let demoArr = [1,3,2,4,6,9,5];
console.log(insertSort(demoArr));
// [1, 2, 3, 4, 5, 6, 9]
  • 獎牌排序


    獎牌題目
// 獎牌排序
var result = [];
let countryKeys = [];
let countrys = ['322834China', '123422England', '233302France', '123425Japan', '234300Rusia', '123422Korea'];

countrys = countrys.sort().reverse();

countrys.forEach(item => {
  let key = item.match(/\d+/g);
  countryKeys.push(key+'');
});

countryKeys.forEach(item => {
  let names = medalRepeat(item);
  
  names.forEach(name => {
    if(result.indexOf(name)==-1) {
      result.push(name);
    }
  });
});

console.log(result);

function medalRepeat(medalNumStr) {
  var a = 0;
  var countryArr = [];
  var reg = new RegExp(medalNumStr);
  
  while(a< countrys.length) {
    var temp = reg.test(countrys[a]);
    
    if(temp){
      let countryName = countrys[a].replace(/\d+/g,'');
      countryArr.push(countryName);
    }
    a++;
  }
  
  return countryArr.sort();
}

源碼

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末膘侮,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子的榛,更是在濱河造成了極大的恐慌琼了,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異雕薪,居然都是意外死亡昧诱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門所袁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盏档,“玉大人,你說我怎么就攤上這事燥爷◎谀叮” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵前翎,是天一觀的道長勺拣。 經(jīng)常有香客問我,道長鱼填,這世上最難降的妖魔是什么药有? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮苹丸,結果婚禮上愤惰,老公的妹妹穿的比我還像新娘。我一直安慰自己赘理,他們只是感情好宦言,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著商模,像睡著了一般奠旺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上施流,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天响疚,我揣著相機與錄音,去河邊找鬼瞪醋。 笑死忿晕,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的银受。 我是一名探鬼主播践盼,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼宾巍!你這毒婦竟也來了咕幻?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤顶霞,失蹤者是張志新(化名)和其女友劉穎肄程,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡绷耍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鲜侥。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片褂始。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖描函,靈堂內(nèi)的尸體忽然破棺而出崎苗,到底是詐尸還是另有隱情,我是刑警寧澤舀寓,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布胆数,位于F島的核電站,受9級特大地震影響互墓,放射性物質發(fā)生泄漏必尼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一篡撵、第九天 我趴在偏房一處隱蔽的房頂上張望判莉。 院中可真熱鬧,春花似錦育谬、人聲如沸券盅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锰镀。三九已至,卻和暖如春咖刃,著一層夾襖步出監(jiān)牢的瞬間泳炉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工嚎杨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留胡桃,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓磕潮,卻偏偏與公主長得像翠胰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子自脯,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

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

  • 一些概念 數(shù)據(jù)結構就是研究數(shù)據(jù)的邏輯結構和物理結構以及它們之間相互關系之景,并對這種結構定義相應的運算,而且確保經(jīng)過這...
    Winterfell_Z閱讀 5,691評論 0 13
  • 一膏潮、基礎知識:1锻狗、JVM、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機...
    殺小賊閱讀 2,369評論 0 4
  • 簡述 極客時間算法40講中所出現(xiàn)的leetcode算法題 題目 【鏈表】reverse-linked-list(反...
    BestbpF閱讀 4,468評論 0 4
  • 前言 這是用來記錄在刷LeetCode時遇到的一些問題的技巧,因只記錄一些技巧或優(yōu)化方案故不一定全部記錄轻纪,自認為的...
    Cesarean閱讀 824評論 0 0
  • 今天是寶貝月考油额,老師難得讓她們輕松一次,沒有布置家庭作業(yè)刻帚,寶貝高興的屁顛屁顛的潦嘶,趁著她高興,我提議: ...
    活著O境界閱讀 187評論 0 1