LeekCode解题记录
Posted eyan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeekCode解题记录相关的知识,希望对你有一定的参考价值。
感觉自从上次用简单算法解了两道小学生题后,感觉就停不下来了。然后就开始在网上找类似的题目,再然后就发现了LeekCode这个网站,专业的算法解题网站,提供题目并且支持在线编辑代码(支持js),之后会通过大量的测试用例来检测你的代码执行结果,并会记录每一次的提交记录。最重要的是,有一个题解模块(玩家交流模块)可以看到别人的解法(玩家自主发言,你也可以发布你自己的解法,当然这之中也有官方发布的题解)。 对于我来说,感觉简直就是来到了天堂一般。虽然我是做前端的,但是我依然对算法充满了兴趣(不太能理解有一些同做前端的同事或朋友并不关心算法的想法,当然他们也不太能理解我的想法)。
我现在兴趣正浓,不过也不知道自己能坚持多久。但是我觉得必要的记录和回顾还是必不可少的。我现在的打算是每天至少完成一个算法,先由浅入深,从简单的算法开始吧,培养思维,再继续深入。
LeekCode--1.两数之和
给定一个整数数组 nums?和一个目标值 target,请你在该数组中找出和为目标值的那?两个?整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
解题思路:第一题很简单(果然网站对于新人还是很友善的)。使用两层for循环依次叠加比较便可实现。
var twoSum = function(nums, target)
for(let i=0;i<nums.length;i++)
for(let j=nums.length-1;j>i;j--)
if(target===nums[i]+nums[j])
return [i,j];
;
然后去看了一下别人的解法,发现自己很low,别人都是用map解的,少了一层遍历,会节省时间,用了map会占用更多空间,典型的用空间换取时间的解法。基本思路:边比较边存值。利用map的特殊性,将数组的值作为map的键,值对应的索引作为map的值。遍历数组,用target与每一项值作差,看是否存在于map中,如存在则返回map中存的索引和当前循环变量,如不存在则将当前值及其索引存入map中。
var twoSum = function(nums, target)
let m=new Map();
for(let i=0;i<nums.length;i++)
if(m.get(target-nums[i])||m.get(target-nums[i])===0)
return [m.get(target-nums[i]),i];
else
m.set(nums[i],i);
;
LeekCode--118.杨辉三角
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
解题思路:杨辉三角应该是所有程序员都实现过的算法之一吧,依旧是两层for循环可以实现,外层循环实现层数,每层的第一个和最后一个数字固定为1,其他数字为上一层对应位置和前一位置值的和。
var generate = function(numRows)
let list=[];
for(let i=1;i<=numRows;i++)
let listA=[];
listA[0]=listA[i-1]=1;
for(let j=1;j<i-1;j++)
listA[j]=list[i-2][j-1]+list[i-2][j];
list.push(listA);
return list;
;
今天写了两个最简单的,明天继续。
以上是关于LeekCode解题记录的主要内容,如果未能解决你的问题,请参考以下文章