简单算法

面试算法题四部曲:

  1. clarification(询问题目细节,边界条件,可能的极端错误情况)。
  2. Possible Solutions (所有可能的解法都和面试官沟通一遍)
    • Compare time &space Complexity(时间&空间复杂度)
    • Optimal Solution (最优解)
  3. Coding (写代码)
  4. Test Cases (写测试用例)
  • 两数之和
    题述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
/**
 * @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... 循环在可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句。

for...in... 循环语句以任意顺序遍历一个对象的除Symbol以外的可枚举属性。

  • 排序链表(148)
    在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。
    示例 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;
  }
};
  • 插入排序
    插入排序是遍历数组中的每一个元素,并寻找到前一个比它小的数,并插入该数后面。
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();
}

源码

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

推荐阅读更多精彩内容

  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 5,745评论 0 13
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,375评论 0 4
  • 简述 极客时间算法40讲中所出现的leetcode算法题 题目 【链表】reverse-linked-list(反...
    BestbpF阅读 4,473评论 0 4
  • 前言 这是用来记录在刷LeetCode时遇到的一些问题的技巧,因只记录一些技巧或优化方案故不一定全部记录,自认为的...
    Cesarean阅读 828评论 0 0
  • 今天是宝贝月考,老师难得让她们轻松一次,没有布置家庭作业,宝贝高兴的屁颠屁颠的,趁着她高兴,我提议: ...
    活着O境界阅读 189评论 0 1