算法
NanDaJ
这个作者很懒,什么都没留下…
展开
-
前序中序后序遍历javascript
前序遍历(递归法)/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ? null : right) * } *//原创 2021-10-17 12:51:45 · 179 阅读 · 0 评论 -
二叉树的层序遍历javascript
实现思路使用一个队列,将头节点放进去,遍历头节点的时候将头节点取出来,然后将头节点的左右节点放进去,以此循环var levelOrder = function(root) { if (!root) { return []; } var res = [];//存放结果的数组 var queue = [];//队列 queue.push(root);//将头节点放入队列 while (queue.length) { var arr = []; //原创 2021-10-16 23:52:29 · 146 阅读 · 0 评论 -
动态规划算法精选题
斐波那契数列题目描述/** * @param {number} n * @return {number} */var fib = function(n) { const mod = 1000000007 if(n<2){ return n } let l = 0, r = 0, num = 1//num=0+1 for(let i = 2;i<=n;i++){ l = r r = num原创 2021-10-16 23:41:03 · 154 阅读 · 0 评论 -
链表算法精选
回文链表题目描述思路使用一个栈将链表遍历了依次存到栈中,然后将栈弹出依次对比/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next) * } *//** * @param {ListNode} head原创 2021-10-15 00:21:36 · 64 阅读 · 0 评论 -
动态规划之最长公共子序列
题目描述题目思路如图如果两个字符串相等,则dp[i][j]=dp[i-1][j-1]+1,表示前面的第i,j个字符前相等的个数加1不相等则选最大/** * @param {string} text1 * @param {string} text2 * @return {number} */var longestCommonSubsequence = function(text1, text2) { let m = text1.length+1 let n = text2原创 2021-10-12 08:59:35 · 62 阅读 · 0 评论 -
动态规划之编辑距离
题目描述解题思路/** * @param {string} word1 * @param {string} word2 * @return {number} */var minDistance = function(word1, word2) { let m = word1.length+1 let n = word2.length+1 var dp = Array.from(Array(m),()=>Array(n).fill(0))//创建一个m*n的数组原创 2021-10-12 08:42:05 · 59 阅读 · 0 评论 -
斐波那契数列
题目链接/** * @param {number} n * @return {number} */var fib = function(n) { const mod = 1000000007 if(n<2){ return n } let l = 0, r = 0, num = 1//num=0+1 for(let i = 2;i<=n;i++){ l = r r = num num原创 2021-10-12 08:34:31 · 59 阅读 · 0 评论 -
打家劫舍123
打家劫舍1解题思路最大的值等于Math.max(第i个值+dp[i-2],dp[i-1])其中dp[i]表示前i个值的最大值/** * @param {number[]} nums * @return {number} */var rob = function(nums) { if(nums==null||nums.length==0) return 0 if(nums.length == 1) return nums[0] if(nums.length == 2原创 2021-10-10 16:09:21 · 40 阅读 · 0 评论 -
买卖股票的最佳时机
题目链接/** * @param {number[]} prices * @return {number} */ /** 实现思路:股票包括买和卖,买和卖要一起发生才能产生利润,所以买一只股票要有一只高于它的股票才能 产生利润。 卖的时候可能会出现后面的价钱越来越高,所以要循环到最高的那个 用两个指针分别指示前后两只股票,当右指针的价钱更高时说明可以卖了,右指针+1(找到最高的那个卖价) */var maxProfit = function(prices) { var l.原创 2021-10-09 10:44:19 · 68 阅读 · 0 评论 -
中国数字转阿拉伯数字
中文数字命名以万和亿为小结,所以这个要判断好let Cnum = { "零":0, "一":1, "二":2, "三":3, "四":4, "五":5, "六":6, "七":7, "八":8, "九":9}let Cq = { "十":10, "百":100, "千":1000, "万":10000, "亿":100000000}function chineseToNum(c原创 2021-10-06 23:31:47 · 232 阅读 · 0 评论 -
合并K个有序链表
题目描述/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next) * } *//** * @param {ListNode[]} lists * @return {ListNode} */var merge原创 2021-09-28 11:04:48 · 60 阅读 · 0 评论 -
删除链表的倒数第n个节点
题目链接/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next) * } *//** * @param {ListNode} head * @param {number} n * @return {ListN原创 2021-09-28 10:26:38 · 54 阅读 · 0 评论 -
最近三数之和
题目描述/** * @param {number[]} nums * @param {number} target * @return {number} */var threeSumClosest = function(nums, target) { let length = nums.length if(length == 0) return null if(length == 1) return nums[0] if(length == 2) return n原创 2021-09-28 08:31:01 · 49 阅读 · 0 评论 -
三数之和为0
题目描述题目思路:将数组从小到大排序从第一个数开始遍历当该数大于0,说明相加起来肯定不会=0,结束遍历当该数等于前一个数,continue剩下两个数定义为right(最右的数),left(该数的下一个数),然后将三个数进行相加,当>0的时候,right–,当<0的时候,++记得去重/** * @param {number[]} nums * @return {number[][]} */var threeSum = function(nums) { if(nu原创 2021-09-28 08:14:19 · 119 阅读 · 0 评论 -
最长公共前缀
题目描述/** * @param {string[]} strs * @return {string} */var longestCommonPrefix = function (strs) { if (strs.length === 0) return '' else if (strs.length === 1) return strs[0] strs.sort() let start = strs[0], end = strs[strs.length原创 2021-09-28 08:08:08 · 44 阅读 · 0 评论 -
罗马数字转整数
题目描述思路:IV表示是4,VI表示是6,所以当左边的字符串大于右边时直接加相应数字,相反则减去该数字,最后记得加上最后一个数字/** * @param {string} s * @return {number} */var romanToInt = function(s) { let obj = { I:1, V:5, X:10, L:50, C:100, D:500, M:原创 2021-09-27 19:31:58 · 50 阅读 · 0 评论 -
2021-09-27
题目描述解题思路:以左右为边界,谁小谁往里面移动,例如右高度比较小,则右向左移动。/** * @param {number[]} height * @return {number} */var maxArea = function(height) { let max = -1 let L = 0 let R = height.length-1 while(L<R){ if(height[L]<height[R]){原创 2021-09-27 19:14:50 · 57 阅读 · 0 评论 -
最长回文字符串
题目描述/** * @param {string} s * @return {string} */var longestPalindrome = function(s) { if(s.length<2) return s // if(s.length<3) return s.charAt(0) let returnS = '' for(let i = 0;i<s.length;i++){ helper(i,i)//回文字符串为单数原创 2021-09-27 19:06:03 · 65 阅读 · 0 评论 -
寻找两个正序数组的中位数
题目链接/** * @param {number[]} nums1 * @param {number[]} nums2 * @return {number} */var findMedianSortedArrays = function(nums1, nums2) { let stack = [] while(nums1.length!=0){ stack.push(nums1.pop()) } while(nums2.length!=0){原创 2021-09-27 18:55:21 · 48 阅读 · 0 评论 -
无重复字符串的最长字串
题目描述/** * @param {string} s * @return {number} */ //滑动窗口解法var lengthOfLongestSubstring = function(s) { if(s=='') return 0 let set = new Set() let max = 0 let left = 0 let right = 1 set.add(s.charAt(left))//添加第一个元素 let leng原创 2021-09-27 18:51:26 · 63 阅读 · 0 评论 -
链表两数相加
题目链接/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next) * } *//** * @param {ListNode} l1 * @param {ListNode} l2 * @return {List原创 2021-09-26 19:38:50 · 64 阅读 · 0 评论 -
求二叉树最大深度
leetcode地址/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ? null : right) * } */原创 2021-07-21 20:59:16 · 69 阅读 · 0 评论 -
给定一个数组,其中一个数出现了奇数次,其他出现了偶数次,求奇数次的数
理论运用到了异或的知识,只要准备一个err = 0即可,由err去异或数组中的所有数,由异或的性质链接1和3可知,最后err = 奇数次的个数function sigle(num){ let err = 0 for(let i =0 ; i<num.length ; i++){ err ^= num[i] } return err}let num = [2,1,2,5,5,1,5]let r = sigle(num)console.log(原创 2021-07-15 16:57:03 · 547 阅读 · 0 评论 -
leetcode删除排序数组中的重复项
/** * @param {number[]} nums * @return {number} */var removeDuplicates = function(nums) {//r代表前指针let r = 0;//a代表后指针for( let a = 0;a<nums.length;a++){ if(nums[r]!=nums[a]){ //如果不相等,将前指针+1并且赋值 nums[++r]=nums[a] }} retur原创 2021-07-05 08:58:58 · 52 阅读 · 0 评论