算法
DaftJayee
这个作者很懒,什么都没留下…
展开
-
[数据结构与算法]给出页面高度,一行展示多张图片,并且图片高度对齐 JavaScript
给出页面高度,一行展示多张图片,并且图片高度对齐function alignImages(imgs, width){...} alignImages([[1, 1], [1, 1]], 3) // [[1.5, 1.5], [1.5, 1.5]]alignImages([[2, 4], [2, 2], [2, 4]], 4) // [[1, 2], [2, 2], [1, 2]] 字符图实例:a表示[2, 4](宽为2,高为原创 2020-10-22 22:40:42 · 432 阅读 · 0 评论 -
[数据结构与算法]最长回文子串(动态规划)
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-palindromic-substring题解:/** * @param {string} s * @return {string} */原创 2020-10-11 19:00:24 · 167 阅读 · 0 评论 -
[数据结构与算法]两个链表的第一个公共节点
输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的) function FindFirstCommonNode(pHead1, pHead2) { let p1 = pHead1 let p2 = pHead2 while (p1 != p2) { // 两个指针都走完两条链表公共节点前的部分原创 2020-10-07 20:25:19 · 116 阅读 · 0 评论 -
[数据结构与算法]子集(回溯) JavaScript
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/subsets题解: var subsets = function (nums) {原创 2020-10-07 18:12:45 · 249 阅读 · 0 评论 -
[数据结构与算法]全排列 (回溯)JavaScript
给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/permutations题解: /** * @param {number[]} nums * @return {number[][]}原创 2020-10-07 17:13:10 · 230 阅读 · 0 评论 -
[数据结构与算法]买卖股票的最佳时机 II (贪心) JavaScript
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票原创 2020-10-07 16:37:12 · 162 阅读 · 0 评论 -
[数据结构与算法]分发饼干 (贪心) JavaScript
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。注意:你可以假设胃口值为正。一个小朋友最多只能拥有一块饼干。示例 1:输入: [1,2,3], [1,1]输出: 1解释: 你有三原创 2020-10-07 16:22:58 · 224 阅读 · 0 评论 -
[算法与数据结构] 打家劫舍 (动态规划) JavaScript
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输入:[2原创 2020-10-07 15:25:03 · 149 阅读 · 0 评论 -
[数据结构与算法]爬楼梯 (动态规划) JavaScript
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶来源:力扣(LeetCode)链接:https://leetcode-c原创 2020-10-07 14:35:56 · 456 阅读 · 0 评论 -
[数据结构与算法]对称二叉树 (分治) JavaScript
对称二叉树给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/symmetric-tree题解:/**原创 2020-10-07 12:46:49 · 139 阅读 · 0 评论 -
[数据结构与算法]相同的树 (分治法) JavaScript
相同的树给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 1 / \ 2原创 2020-10-07 12:28:21 · 180 阅读 · 0 评论 -
[数据结构与算法]合并K个升序链表 (利用堆) JavaScript
给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例 2:输入:lists = []输原创 2020-10-05 23:41:35 · 220 阅读 · 0 评论 -
[数据结构与算法]前k个高频元素(用堆优化) JavaScript
题目:前k个高频元素给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]提示:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。你可以按任意顺序原创 2020-10-05 22:19:36 · 270 阅读 · 0 评论 -
[数据结构与算法]数组中的第k个最大元素(堆)
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/kth-largest-element-i原创 2020-10-05 22:02:27 · 203 阅读 · 0 评论 -
[数据结构与算法]克隆图
/** * // Definition for a Node. * function Node(val, neighbors) { * this.val = val === undefined ? 0 : val; * this.neighbors = neighbors === undefined ? [] : neighbors; * }; */ /** * @param {Node} node ...原创 2020-10-05 15:27:02 · 116 阅读 · 0 评论 -
[数据结构与算法]太平洋大西洋水流问题(图)
给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度。“太平洋”处于大陆的左边界和上边界,而“大西洋”处于大陆的右边界和下边界。规定水流只能按照上、下、左、右四个方向流动,且只能从高到低或者在同等高度上流动。请找出那些水流既可以流动到“太平洋”,又能流动到“大西洋”的陆地单元的坐标。提示:输出坐标的顺序不重要m 和 n 都小于150示例:给定下面的 5x5 矩阵:返回:[[0, 4], [1, 3], [1, 4], [2, 2], [3, 0], [3, 1], [4,原创 2020-10-05 00:11:10 · 662 阅读 · 0 评论 -
[数据结构与算法]遍历JSON的所有节点值
const JSON = { a: { b: { c: 1 } }, d: [1, 2], } const dfs = (n, path) => { console.log(n, path); Object.keys(n).forEach(k => { dfs(n[k], path.concat(k)) }) } ...原创 2020-10-04 20:35:27 · 377 阅读 · 0 评论 -
[数据结构与算法]剑指 Offer 34. 二叉树中和为某一值的路径
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:[[5,4,11,2],[5,8,4,5]]/** * Definition for a bi原创 2020-10-04 19:46:29 · 92 阅读 · 0 评论 -
[算法][JavaScript] 无重复字符的最长子串
function fn(s) { let l = 0 let res = 0 let resL = 0 let resR = 0 const map = new Map() for (let r = 0; r < s.length; r++) { if (map.has(s[r]) && map....原创 2020-10-02 22:37:20 · 69 阅读 · 0 评论 -
[数据结构与算法]无重复字符的最长子串长度,字典
/** * @param {string} s * @return {number} */var lengthOfLongestSubstring = function(s) { let l = 0 /* 窗口左边指针 */ let res = 0 const map = new Map() for(let r = 0;r<s.length;r++){ /* 移动窗口右边指针 */ if(map.has(s[r]) && map.get(s原创 2020-09-20 16:47:41 · 77 阅读 · 0 评论 -
[数据结构与算法]输出1~10000中的对称数
var result = [];for(let i=1;i<10;i++){ result.push(i*11); // 两位数的对称数 for(let j=0;j<10;j++){ result.push(i*101+j*10) // 三位数的对称数 result.push(i*1001+j*110) // 四位数的对称数,当i和j均为9是值为9999 }}...原创 2020-09-17 14:43:07 · 677 阅读 · 0 评论 -
[JavaScript]根据属性进行排序
function compare(property, sort) { return function (a, b) { // sort =1 是正序,sort = -1 是倒序 var value1 = a[property]; var value2 = b[property]; if (sort == 1) { ...原创 2020-09-16 21:29:17 · 92 阅读 · 0 评论 -
[数据结构与算法]二叉树的最小深度
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],/* bfs写法: */ var minDepth = function (root) { if (!root) { return 0 } let queue = [[root, 1]]原创 2020-09-16 21:02:15 · 389 阅读 · 0 评论 -
[数据结构与算法]二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } *//原创 2020-09-16 20:17:12 · 138 阅读 · 0 评论 -
[数据结构与算法]树的相关基础算法,dfs,bfs,二叉树的先中后序遍历(语言:JavaScript)
树的构造代码在文章最下方,方便大家直接进行复制一、深度优先遍历思路:访问根节点对根节点的children挨个进行深度优先遍历代码实现: const dfs = (root) => { console.log(root.val) root.children.forEach(dfs) }二、广度优先遍历思路:新建一个队列,把根节点入队把队头出队并访问把队头的children挨个入队重复第2、3步直原创 2020-09-16 17:06:33 · 114 阅读 · 0 评论 -
[算法与数据结构]数组中是否有两数之和等于目标数
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/two-sum著作权归领扣网络所有原创 2020-09-15 00:03:19 · 207 阅读 · 0 评论 -
[数据结构与算法]两个数组的交集
给定两个数组,编写一个函数来计算它们的交集。/** * @param {number[]} nums1 * @param {number[]} nums2 * @return {number[]} */var intersection = function(nums1, nums2) { return [...new Set(nums1)].filter((item) =>{ return new Set(nums2).has(item) } )}原创 2020-09-13 20:20:28 · 351 阅读 · 0 评论 -
[数据结构与算法]判断链表是否有环,快慢指针
给定一个链表,判断链表中是否有环。var hasCycle = function (head) { let p1 = head // 慢指针 let p2 = head // 快指针 while(p2 && p2.next){ // 当快指针还没有走完链表 p1 = p1.next // 慢指针移动 p2 = p2.next.next // 快指针移动 if(p1 === p2){ // 第二次相遇(起点是第一次)原创 2020-09-13 15:58:55 · 139 阅读 · 0 评论 -
[数据结构与算法]删除排序链表中的重复元素
var deleteDuplicates = function(head) { let cur = head while(cur && cur.next) { if(cur.next.val === cur.val) { cur.next = cur.next.next } else{cur = cur.next} } return head};原创 2020-09-13 15:33:37 · 163 阅读 · 0 评论 -
[数据结构与算法]排序算法汇总(JavaScript版)
JavaScript所有排序算法汇总一、冒泡排序 Array.prototype.bubbleSort = function () { for (let i = 0; i < this.length - 1; i++) { for (let j = 0; j < this.length - 1 - i; j++) { if (this[j] > this[j + 1]) {原创 2020-09-13 09:54:31 · 238 阅读 · 0 评论 -
[数据结构与算法]链表反转
/** * @param {ListNode} head * @return {ListNode} */var reverseList = function(head) { let p1 = head let p2 =null while (p1){ const tmp = p1.next p1.next = p2 p2 = p1 p1 = tmp }};原创 2020-09-13 08:35:51 · 71 阅读 · 0 评论 -
[数据结构与算法]两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807var addTwoNumbers = function(l1, l2原创 2020-09-13 08:35:16 · 223 阅读 · 0 评论 -
[数据结构与算法]删除链表节点
递归写法:/** * @param {ListNode} head * @param {number} val * @return {ListNode} */var deleteNode = function(head, val) { if(head.val == val){ return head.next } head.next = deleteNode(head.next,val); return head};哨兵节点:/** *原创 2020-09-12 16:00:12 · 238 阅读 · 0 评论 -
[数据结构与算法]求最近的请求次数,队列
var RecentCounter = function () { this.queue = [] }; RecentCounter.prototype.ping = function (t) { this.queue.push(t) let beforeT = t - 3000 while (this.queue[0] < beforeT) { ...原创 2020-09-12 14:24:45 · 137 阅读 · 0 评论 -
[数据结构与算法]十进制转换为二进制
function fn(num) { let stack = [] let n = num % 2 while (num > 0) { stack.push(n) num = parseInt(num / 2) // 注意这里一定要做转为整形的处理,用Math.floor向下取整也可 n = num % 2 ...原创 2020-09-12 13:53:52 · 2559 阅读 · 0 评论 -
[数据结构与算法]用ES6实现一个栈,class Stack
class Stack { constructor() { this.dataStore = []; //{2} this.top = 0; } //Stack方法 push(item) { this.dataStore.push(item); this.top++; ...原创 2020-09-12 13:33:46 · 487 阅读 · 0 评论 -
[数据结构与算法]二叉树前序遍历
递归写法:const preorderTraversal = function (root) { if (!root) { return [] } let res = [] res.push(root.val) res = res.concat(preorderTraversal(root.left)) res = res.concat(preorderTraversal(root.right)) return res}递归优雅原创 2020-09-12 12:10:14 · 126 阅读 · 0 评论 -
[数据结构与算法]有效的括号(判断括号是否匹配),栈,字典
var isValid = function (s) { if (s.length % 2 === 1) { //如果字符串是奇数,则括号必定无法一一匹配 return false } const stack = []; for (let i = 0; i < s.length; i++) { c...原创 2020-09-12 11:10:45 · 411 阅读 · 0 评论 -
[数据结构与算法]二维数组中的查找
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。一、常规解法:function Find(target, array) { const rowNum = array.length; if (!rowNum) { return false; } const colNum = array[0].length;原创 2020-09-06 18:06:22 · 103 阅读 · 0 评论