
算法
渣渣前端
公众号:小码农的成长之路
展开
-
寻找无重复最长子串
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。首先遍历这个字符串,将它插入到一个数组中,当遇到相同字符时,就移除数组中的元素,最后返回数组长度的最大值即可var lengthOfLongestSubstring = function(s) { var arr=[]; var max=0; for(var i=0;i<s.length;i..原创 2020-06-14 10:33:47 · 334 阅读 · 0 评论 -
求三数之和
给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]思路:先对数组nums进行排序,设置len为数组长度,设置i值为从0到len-2,left为i+1,right为len-1,然后这三个数相加为sum,如果nums[i]...原创 2020-05-11 15:56:46 · 739 阅读 · 0 评论 -
滑动窗口求最大值
给定一个数组 nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释: 滑动窗口的位置 最大值--------------- -----[1 3 -1] -3 5 3 6 7 3...原创 2020-05-09 11:15:49 · 504 阅读 · 0 评论 -
链表:求两数之和
给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -&...原创 2020-05-06 08:27:46 · 494 阅读 · 0 评论 -
删除链表的倒数第n个节点
给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.先遍历一次链表,求出链表的长度,然后再用链表长度减去n,如果为0,则是删除第一个节点,否则找到链表要删除节点的前一个节点,让它的next等于要删除节点的nextvar removeNthFromEnd = function(...原创 2020-04-11 15:42:54 · 384 阅读 · 0 评论 -
求多个数组的交集
首先是把每个数组去重,然后将他们合并,合并后数组元素的个数等于原来的数组个数,这个元素就是数组的交集 function fn(...rest){ for(var i=0;i<[...rest].length;i++){ rest[i]=Array.from(new Set(rest[i])) ...原创 2020-04-08 10:37:31 · 2021 阅读 · 0 评论 -
贪心算法题
有一道算法题是这样,一个数组存储了非负整型数据,数组的第i个元素num[i],代表了可以从数组第i个位置最多向前跳跃num[i]步,已知数组各元素的情况下,求是否可以从数组的第0个位置跳跃到数组的最后一个位置。例如[2,3,1,1,4],可以从num[0]跳到num[4],[3,2,1,0,4]不可以从num[0]跳到num[4] function isGet(arr){ ...原创 2020-03-25 23:14:53 · 221 阅读 · 0 评论 -
快手笔试题
n位同学排成一列,数组height[i]表示这队人从前到后的身高,返回队中每个人与前方身高高于自己的人的最短距离,没有为0,例如[175,173,174,163,182,172],返回[0,1,2,1,0,1] function sum(arr){ var s=[] if(arr.length==1)return 0; ...原创 2020-03-22 21:04:35 · 493 阅读 · 0 评论 -
求数组中最大子序列长度
有一道算法题是这样,求数组中最大顺序子序列长度。例如[7,3,5,6,9,2],最大子序列长度为4,即3,5,6,9 function sum(arr){ var dp=[] for(var i=0;i<arr.length;i++){ dp[i]=[] dp[i].push(arr[i]) } for(var j=0;j<dp....原创 2020-03-21 10:47:20 · 975 阅读 · 1 评论 -
js二叉堆
二叉堆是类似二叉树的一种数据结构,有最大堆和最小堆,最小堆所有节点的值都比它的子节点要小。class MinHeap{ constructor(){ this.heap=[] } getLeftIndex(index){return index*2+1} getRightIndex(index){return ind...原创 2020-03-20 15:47:31 · 412 阅读 · 0 评论 -
js二叉树
class Node { constructor(data) { this.left = null this.right = null; this.data = data; } } class Tree { ...原创 2020-03-20 09:44:40 · 218 阅读 · 0 评论 -
计算excel行号和列号
function get(str){ var arr=[] var row=0; var column=0; for(var i=0;i<str.length;i++){ if(!Object.is(str.charAt(i)*1,NaN)){ arr[0]=str.substr(0,i) ...原创 2020-03-16 17:21:23 · 860 阅读 · 0 评论 -
求n阶斐波那契数列
k阶斐波那契数列的前k-2项都是0,第k-1项为1,然后后面每一项都是它前面的k项之和function fibonacciIterative(k,m){ if(k<1)return false; if(m<k-1)return 0; if(m==k-1)return 1; return fibonacciIterative(k,m-1)+fibon...原创 2020-03-14 00:44:58 · 1171 阅读 · 0 评论 -
栈的实现及应用
class Stack{ constructor(){ this.arr=[] this.count=0; }//添加栈元素 add(data){ this.arr.push(data); this.count++; }//移除栈顶元素 sub(){ if(this.isE...原创 2020-03-13 23:37:47 · 286 阅读 · 0 评论 -
100元分钱
有一道算法题是这样,100元随机分给10个人,每个人最少6元,最多12元let arr=[6,7,8,9,10,11,12]function fn(){ let x=[] for(let i=0;i<10;i++){ let random=~~(Math.random()*7); x.push(arr[random]) } ...原创 2020-03-12 19:51:56 · 578 阅读 · 0 评论