![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
牛客-剑指offer
kotoriyou
准备蹭过龙门的前端酸菜鱼
展开
-
牛客网-剑指offer[编程题]剪绳子 js详解
这个题的意思就是把绳子尽量分成由2和3组成的小部分如果绳子长度为偶数,就全部分为由n*2组成如果绳子长度为奇数,就全部分为由(n-1)2组成+13组成function cutRope(number){ // write code here if(number == 2) return 1; if(number == 3) return 2; if(num...原创 2020-01-16 11:23:32 · 337 阅读 · 0 评论 -
牛客网-剑指offer[编程题]机器人的运动范围 js详解
这道题跟前一道题一样,也是回溯法,分析题目,我们需要两个全局变量:标志数组(flag)和计数变量(sum);需要一个函数(sumNum)来计算行坐标和列坐标的数位之和;终止条件包括三种情况:越界、重复、行坐标和列坐标的数位之和超过k,然后流程和上一道题相同function movingCount(threshold, rows, cols){ // write code here ...原创 2020-01-16 11:15:20 · 246 阅读 · 1 评论 -
牛客网-剑指offer[编程题]矩阵中的路径 js详解
回溯法按深度优先策略搜索问题的解空间树。首先从根节点出发搜索解空间树,当算法搜索至解空间树的某一节点时,先利用剪枝函数判断该节点是否可行(即能得到问题的解)。如果不可行,则跳过对该节点为根的子树的搜索,逐层向其祖先节点回溯;否则,进入该子树,继续按深度优先策略搜索。回溯法的基本行为是搜索,搜索过程使用剪枝函数来为了避免无效的搜索。剪枝函数包括两类:1. 使用约束函数,剪去不满足约束条件的路径...原创 2020-01-16 10:58:28 · 255 阅读 · 0 评论 -
牛客网-剑指offer[编程题]滑动窗口的最大值 js详解
也是一道简单题只要算清楚每个数组能容纳几个滑动窗口即可用arr.slice()方法进行划分function maxInWindows(num, size){ if(num == null||size == 0||size == null)return []; var res = []; var arr = []; var type = num.length...原创 2020-01-16 10:02:25 · 195 阅读 · 0 评论 -
牛客网-剑指offer[编程题]数据流中的中位数 js详解
var arr = [];function Insert(num){ arr.push(num); arr.sort(function (a,b){ return a-b; })}function GetMedian(){ // write code here if(arr.length % 2 == 0){ retu...原创 2020-01-16 09:57:12 · 222 阅读 · 0 评论 -
牛客网-剑指offer[编程题]二叉搜索树的第k个结点 js详解
二叉搜索树的中序遍历就是节点递增序列function KthNode(root, k){ if(!root) return; var arr = []; inorder(root,arr) return arr[k-1];}function inorder(root,arr) { if(!root) return; ...原创 2020-01-15 17:57:47 · 201 阅读 · 0 评论 -
牛客网-剑指offer[编程题]序列化二叉树 js详解
先序遍历+先序遍历结果合成var arr = [];function Serialize(pRoot){ // write code here if(pRoot==null){ arr.push('a'); }else{ arr.push(pRoot.val); Serialize(pRoot.left); ...原创 2020-01-15 16:49:48 · 160 阅读 · 0 评论 -
牛客网-剑指offer[编程题]把二叉树打印成多行 js详解
这个就是树的层次遍历,比上一题加了条件的层次遍历还要简单只有搞清楚了各个数组之间的关系就ok举例:三个数组只有arr中存储节点,其他两个只存储值以下是数组变化:arr = [1];tempArr = [];temp = 1;arr = [];tempArr = [1];arr = [2];arr = [2,3]res = [[1]]tempArr = [];temp...原创 2020-01-15 15:32:16 · 153 阅读 · 0 评论 -
牛客网-剑指offer[编程题]按之字形顺序打印二叉树 js详解
本质上来说还是树的层次遍历只是加了一个flag用flag来控制是奇数行还是偶数行奇数行正常push偶数行翻转function Print(pRoot){ if(!pRoot){ return []; } var queue = [], result = [], flag=true; queue.push(...原创 2020-01-15 14:51:02 · 186 阅读 · 0 评论 -
牛客网-剑指offer[编程题]对称的二叉树 js详解
只有左孩子和右孩子值相等,才是对称二叉树递归解决这个问题/* function TreeNode(x) { this.val = x; this.left = null; this.right = null;} */function jude(node1,node2){ if (node1 == null && node2 == null) {...原创 2020-01-15 12:24:35 · 142 阅读 · 0 评论 -
牛客网-剑指offer[编程题]二叉树的下一个结点 js详解
这个题思路也蛮简单先找根节点找到以后中序遍历,把结果存一个数组然后比对我们要找的值和中序遍历结果,输出下一个值即可/*function TreeLinkNode(x){ this.val = x; this.left = null; this.right = null; this.next = null;}*/ var list = [];funct...原创 2020-01-15 12:03:07 · 148 阅读 · 0 评论 -
牛客网-剑指offer[编程题]删除链表中重复的结点 js详解
题目中给的链表头结点也有值,我们要先给链表创建一个结点值为null的新头结点设置一个qHead,当前节点的下一个节点不为null且两节点值相同时,qHead向前移动此时分两种情况:①移动了:指向头节点的pHead指向再往前移动一位的qHead,相当于删除中间重复的值②没有移动:说明没有和Phead同值的节点,这时候qHead和pHead都前移,测试下一个节点/*function List...原创 2020-01-15 10:27:26 · 165 阅读 · 0 评论 -
牛客网-剑指offer[编程题]链表中环的入口结点 js详解
如果链表中环 有n个结点,指针P1在链表上向前移动n步,然后两个指针以相同的速度向前移动。当第二个指针指向环的入口结点时,第一个指针已经围绕着环走了一圈又回到了入口结点。function EntryNodeOfLoop(pHead){ // write code here if(pHead==null || pHead.next==null || pHead.next.ne...原创 2020-01-14 13:46:15 · 177 阅读 · 0 评论 -
牛客网-剑指offer[编程题]字符流中第一个不重复的字符 js详解
下面的代码:用字母为对象的key来统计,遇到相同的字母对应的value加一,遍历输value为1的字符//Init module if you needlet map = {}function Init(){ // write code here map = {}}//Insert one char from stringstreamfunction Insert...原创 2020-01-14 12:27:51 · 191 阅读 · 0 评论 -
牛客网-剑指offer[编程题]表示数值的字符串 js详解
^ 和 美元符号框定正则表达式,它指引这个正则表达式对文本中的所有字符都进行匹配。如果省略这些标识,那么只要一个字符串中包含一个数字这个正则表达式就会进行匹配。如果仅包含 ^ ,它将匹配以一个数字开头的字符串。如果仅包含$ ,则匹配以一个数字结尾的字符串。[-+]?正负号后面的 ? 后缀表示这个负号是可选的,表示有0到1个负号或者正号\d*\d的含义和[0-9]一样。它匹配一个数字。后缀...原创 2020-01-14 12:08:50 · 153 阅读 · 0 评论 -
牛客网-剑指offer[编程题]正则表达式匹配 js详解
1.调用库函数^:从字符串开头进行匹配$:从字符串末尾进行匹配function match(s, pattern){ var reg=new RegExp("^" + pattern + "$"); return reg.test(s);}2.不调用库函数//s, pattern都是字符串function match(s, pattern){ // w...原创 2020-01-14 11:45:18 · 155 阅读 · 0 评论 -
牛客网-剑指offer[编程题]构建乘积数组 js详解
借用一下牛客大佬的思路:解释下代码,设有数组大小为5。对于第一个for循环第一步:b[0] = 1;第二步:b[1] = b[0] * a[0] = a[0]第三步:b[2] = b[1] * a[1] = a[0] * a[1];第四步:b[3] = b[2] * a[2] = a[0] * a[1] * a[2];第五步:b[4] = b[3] * a[3] = a[0] * a...原创 2020-01-14 10:46:35 · 170 阅读 · 0 评论 -
牛客网-剑指offer[编程题]数组中重复的数字 js详解
这个题简单 没啥好说的function duplicate(numbers, duplication){ // write code here //这里要特别注意~找到任意重复的一个值并赋值到duplication[0] //函数返回True/False if(numbers.length==1) return false if(num...原创 2020-01-13 13:17:11 · 183 阅读 · 0 评论 -
牛客网-剑指offer[编程题]把字符串转换成整数 js详解
这道题非常迷估计是19年11月牛客改变了判断样例,凡是在这之前的示例代码基本没有能100%通过的,都是85%有一个样例输入是2147483649,正常情况下会溢出,如果不给它进行判断就不能通过// 第一位是符号位function StrToInt(str) { if (str === undefined || str === '') { return 0; } if...原创 2020-01-13 12:29:54 · 236 阅读 · 0 评论 -
牛客网-剑指offer[编程题]不用加减乘除做加法 js详解
按位与(&)是查看两个数哪些二进制位都为1,这些都是进位位,结果需左移一位,表示进位后的结果异或(^)是查看两个数哪些二进制位只有一个为1,这些是非进位位,可以直接加、减,结果表示非进位位进行加操作后的结果function Add(num1, num2){ return num2 ? Add(num1^num2, (num1&num2)<<1) : ...原创 2020-01-13 11:15:16 · 150 阅读 · 0 评论 -
牛客网-剑指offer[编程题]求1+2+3+...+n js详解
递归即可解决function Sum_Solution(n){ var sum = n; sum && (sum+= Sum_Solution(n-1)); return sum; // write code here} 上方代码和下方代码完全等价 对上面&&语句不理解的看下面那个if就可以function Sum...原创 2020-01-13 10:53:55 · 219 阅读 · 0 评论 -
牛客网-剑指offer[编程题]孩子们的游戏(圆圈中最后剩下的数) js详解
用数学归纳法推导出递推公式:设有n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数。令f[i]表示i个人时最后胜利者的编号,则有递推公式:f[1]=0;f[i]=(f[i-1]+m)%i; (i>1)通过递推公式即可求得f[n]。function LastRemaining_Solution(n, m){ // write cod...原创 2020-01-13 10:44:43 · 168 阅读 · 0 评论 -
牛客网-剑指offer[编程题]扑克牌顺子 js详解
如果没有0 ,lastIndexOf(0)=-1var sorted = numbers.sort((a, b) => {return a-b;})//为从小到大排序function IsContinuous(numbers) { // write code here var sorted = numbers.sort((a, b) => { ...原创 2020-01-12 13:33:44 · 315 阅读 · 0 评论 -
牛客网-剑指offer[编程题]翻转单词顺序列 js详解
这道题用js就是这么简单,一行代码解决问题!换成c语言估计要写至少二十行我们解释一下这一行代码的精髓:str.split(" ")以空格为界 把字符串转化为字符串数组reverse()以每个字符串为单位 进行字符翻转join(" ")给每个字符串数组中加空格并转化成字符串function ReverseSentence(str){ return str.split("...原创 2020-01-12 13:20:32 · 204 阅读 · 0 评论 -
牛客网-剑指offer[编程题]左旋转字符串 js详解
这个也是简单题,没啥好说的,注意多种情况即可function LeftRotateString(str, n){ if(str === null||n === null)return []; if(str.length === 0 )return []; if (n === 0)return str; if(n > str.length){ ...原创 2020-01-12 13:07:37 · 121 阅读 · 0 评论 -
牛客网-剑指offer[编程题]和为S的两个数字 js详解
这道题没啥好说的,暴力穷举即可注意点:判断数组是否存在:array == null;判断数组是否为空:array.length == 0;千万不要混淆成 array.length == null;function FindNumbersWithSum(array, sum){ var arr = []; var res = []; var temp = [];...原创 2020-01-12 12:55:06 · 177 阅读 · 0 评论 -
牛客网-剑指offer[编程题]和为S的连续正数序列 js详解
本题考查群举法不要把它想太难,我们需要一遍一遍尝试可能的结果使用两个数组,一个存放我们现在要算的一组值arr,一个存储算好的几组值res,我们需要从一开始累加,当累加和等于sum时,我们把它加入res,在总和里减去栈顶的值,并弹出栈,并加下一个数,如果这样还是比sum大那我们就一直弹出栈顶的数,直到总和小于sum时,再往下加下一个数。function FindContinuousSe...原创 2020-01-12 11:08:07 · 210 阅读 · 0 评论 -
牛客网-剑指offer[编程题]平衡二叉树 js详解
平衡二叉树(Balanced Binary Tree) 具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。 最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,可以参考Fibonacci数列,1是根节点,F(n-1)是左...原创 2020-01-11 21:41:25 · 174 阅读 · 0 评论 -
牛客网-剑指offer[编程题]二叉树的深度 js详解
二叉树的深度优先遍历1.递归方法:function TreeDepth(pRoot){ if(!pRoot) return 0; var left = 1 + TreeDepth(pRoot.left); var right = 1+ TreeDepth(pRoot.right); return Math.max(left,right)}2.非递归方法...原创 2020-01-11 14:11:03 · 180 阅读 · 0 评论 -
牛客网-剑指offer[编程题]数组中只出现一次的数字 js详解
采用栈的方法应该是这道题最简单的方法了吧排序后遍历数组,先压入栈一个数,如果有相同的数就弹出这个栈顶的数最后栈里剩的就是只出现一次的数了function FindNumsAppearOnce(array){ var arr = array.sort(function(a,b){return a - b}); var stack = [arr[0]]; for(va...原创 2020-01-11 13:43:33 · 137 阅读 · 0 评论 -
牛客网-剑指offer[编程题]数字在排序数组中出现的次数 js详解
这道题算的上剑指offer上数一数二简单的题了吧两种方法:1.for循环遍历寻找function GetNumberOfK(data, k){ // write code here if(data.length == 0)return 0; var count = 0; for(var a = 0;a < data.length;a++){ ...原创 2020-01-11 13:09:51 · 205 阅读 · 0 评论 -
牛客网-剑指offer[编程题]两个链表的第一个公共结点 js详解
这道题也讲究一个巧字,钻牛角尖是行不通的两有公共节点的链表如:1 2 4 3 6 78 4 3 6 73是第一个公共节点如果我们让两个链表首尾衔接,有两种形式1 2 4 3 6 7 8 4 3 6 78 4 3 6 7 1 2 4 3 6 7我们发现两个链表长度相同,且公共节点也一个位置,这个时候我们只需要遍历寻找相等节点即可function FindFirstCommon...原创 2020-01-11 12:58:47 · 164 阅读 · 0 评论 -
牛客网-剑指offer[编程题]数组中的逆序对 js详解
不用尝试双重循环暴力解,会超时的!复杂度太高了我们需要采用二路归并方法二路归并即merge,是将两个有序的序列合并为一个有序的序列,在两个子序列left、right合并过程中,当left中当前元素A小于right中当前元素B时,因为right序列已经有序,所以不用比较,A一定是left、right两个子序列当前剩余元素中最小的元素,这省去了A与B后其他元素比较的操作。对于本题,在两个子序列...原创 2020-01-10 21:18:02 · 218 阅读 · 0 评论 -
牛客网-剑指offer[编程题]顺时针打印矩阵 js详解
一定要认真读题 这道题不能排序以后再寻找!!!因为要返回原位置,而不是值因为没有理解清楚浪费好多时间写了个错的。。。以下是正确代码function FirstNotRepeatingChar(str){ // write code here var length=str.length; for(var i=0;i<length;i++) { ...原创 2020-01-10 14:04:59 · 99 阅读 · 0 评论 -
牛客网-剑指offer[编程题]丑数 js详解
而在2x,3y,5z中,如果x=y=z那么最小丑数一定是乘以2的,但关键是有可能存在x>y>z的情况,所以我们要维持三个指针来记录当前乘以2、乘以3、乘以5的最小值,然后当其被选为新的最小值后,要把相应的指针+1;因为这个指针会逐渐遍历整个数组,因此最终数组中的每一个值都会被乘以2、乘以3、乘以5,也就是实现了我们最开始的想法,只不过不是同时成乘以2、3、5,而是在需要的时候乘以2、...原创 2020-01-10 12:54:18 · 84 阅读 · 0 评论 -
牛客网-剑指offer[编程题]把数组排成最小的数 js详解
Array对象中的sort()方法是一个很高效的排序方法,用于对数组进行排序。其基本用法有两种:1、不带参数数组名.sort();1这种用法只适用于对英文字符串组成的数组按升序排序,结果在原数组中。2、带参数sort()方法的参数必须是一个函数,函数可以带一个或两个参数,表示数组的元素,返回值必须是正负零,表示数组元素相比较的办法。数组名.sort( function(a,b){...原创 2020-01-10 12:27:59 · 177 阅读 · 0 评论 -
牛客网-剑指offer[编程题]整数中1出现的次数(从1到n整数中1出现的次数) js详解
js中如何将数组转换成字符串 array.jion()js中如何将字符串转换成数组 array.split()我用了两个函数解决这个问题,一个函数把 1-n的数存入数组再转化为字符串一个函数把字符串里 1 的个数统计出来str.indexOf(char)是字符串中第一次出现char的位置stringObject.indexOf(searchvalue,fromindex)sear...原创 2020-01-10 11:08:56 · 359 阅读 · 0 评论 -
牛客网-剑指offer[编程题]连续数组的最大和 js详解
经典动态规划题要实现连续数组最大和,我们要求前几个数的和一定不能是负数不然和下一个数相加的值一定会变得更小function FindGreatestSumOfSubArray(array){ // write code here let max=array[0],temp=array[0]; for(let i=1;i<array.length;i++){...原创 2020-01-09 21:11:30 · 139 阅读 · 0 评论 -
牛客网-剑指offer[编程题]最小的K个数 js详解
题目很简单,就是一定要注意对多种情况的判断如果k > input.length,要return [] 而不是null(我在这卡了半天。。。)function GetLeastNumbers_Solution(input, k){ // write code here if(input === null||k == null|| k < 0 ) r...原创 2020-01-09 20:50:52 · 107 阅读 · 0 评论 -
牛客网-剑指offer[编程题]数组中出现次数超过一半的数字 js详解
1.暴力双循环法function MoreThanHalfNum_Solution(numbers){ var mid = Math.floor(numbers.length/2); for(var i = 0;i < numbers.length;i++){ var temp = numbers[i] var count = 0; ...原创 2020-01-09 19:17:49 · 151 阅读 · 0 评论