![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法学习
每日一题
伯约同学
更新前端面试的一些常见题目,记录学习过程
展开
-
Leetcode18四数之和(双指针法)
给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):0 <= a, b, c, d < na、b、c 和 d 互不相同nums[a] + nums[b] + nums[c] + nums[d] == target你可以按 任意顺序 返回答案 。答题:/** * @param {numbe原创 2022-04-11 21:48:24 · 305 阅读 · 0 评论 -
Leetcode306累加数(递归解决)
累加数 是一个字符串,组成它的数字可以形成累加序列。一个有效的 累加序列 必须 至少 包含 3 个数。除了最开始的两个数以外,序列中的每个后续数字必须是它之前两个数字之和。给你一个只包含数字 ‘0’-‘9’ 的字符串,编写一个算法来判断给定输入是否是 累加数 。如果是,返回 true ;否则,返回 false 。说明:累加序列里的数,除数字 0 之外,不会 以 0 开头,所以不会出现 1, 2, 03 或者 1, 02, 3 的情况。答题:/** * @param {string} num *原创 2022-04-10 18:58:28 · 530 阅读 · 0 评论 -
Leetcode47全排列II(回溯+剪枝)
给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。/** * @param {number[]} nums * @return {number[][]} */var permuteUnique = function(nums) { let res = [] function dfs(arr,rest){ console.log(arr,rest) if(arr.length === nums.length){原创 2022-04-09 22:09:58 · 573 阅读 · 0 评论 -
剑指offer29顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。答题:/** * @param {number[][]} matrix * @return {number[]} */ var spiralOrder = function(matrix) { let res = [] let tem = '' try{ while(matrix.length){ let top = matrix.shift() for(let原创 2022-04-07 20:17:33 · 365 阅读 · 0 评论 -
Leetcode2两数相加(链表应用)
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。答题/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.n原创 2022-04-04 23:44:53 · 368 阅读 · 0 评论 -
Leetcode79单词搜索(深度遍历解法)
Leetcode79单词搜索(深度遍历解法)给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。/** * @param {character[][]} board * @param {string} word * @return {boolean} */原创 2022-03-30 23:41:08 · 261 阅读 · 0 评论 -
Leetcode5最长回文子串(中心拓展法和动态规划法)
Leetcode5最长回文子串(中心拓展法和动态规划法)给你一个字符串s,找到s中最长的回文子串。答题/** \* @param {string} s \* @return {string} */var longestPalindrome = function longestPalindrome(s){ let n = s.length; let res = ''; let dp = Array.from(new Array(n),() => new Array(n).fil原创 2022-03-28 23:01:18 · 508 阅读 · 0 评论 -
Leetcode76最小覆盖子串(滑动窗口解法)
Leetcode76最小覆盖子串(滑动窗口解法)给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。注意:对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。如果 s 中存在这样的子串,我们保证它是唯一的答案。答题:/** * @param {string} s * @param {string} t * @return {string} */var minW原创 2022-03-27 22:38:09 · 397 阅读 · 0 评论 -
Leetcode344反转字符串(双指针解法)
Leetcode344反转字符串(双指针解法)编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。答题:/** \* @param {character[]} s \* @return {void} Do not return anything, modify s in-place instead. */var reverseString = function(s)原创 2022-03-26 23:13:31 · 975 阅读 · 0 评论 -
Leetcode283移动零(双指针解法)
Leetcode283移动零(双指针解法)给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。答题:/** \* @param {number[]} nums \* @return {void} Do not return anything, modify nums in-place instead. */var moveZeroes = function(nums) { let l原创 2022-03-25 12:51:51 · 436 阅读 · 0 评论 -
Leetcode977有序数组的平方(双指针解法)
Leetcode977有序数组的平方题目给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。答题/** \* @param {number[]} nums \* @return {number[]} */var sortedSquares = function(nums) { let left = 0 let right = nums.length -1 let res = [] while(left <=原创 2022-03-23 22:04:50 · 254 阅读 · 0 评论 -
Leetcode34在排序数组中查找元素的第一个和最后一个位置(二分法求解)
Leetcode34在排序数组中查找元素的第一个和最后一个位置(二分法求解)给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。答题:/** \* @param {number[]} nums \* @param {number} target \* @return {number[]} */var searchRange = function(nums, targe原创 2022-03-19 20:54:20 · 400 阅读 · 0 评论 -
三分钟学习一下JavaScript中map对象的用法
三分钟学习一下JavaScript中map对象的用法上一篇文章花了几分钟时间看了看set对象的使用,今天来写一些map对象的使用。两者的属性和方法差不多,老规矩,整体过一下。1. 构造方法 let myMap1 = new Map([ [1, 'one'], [2, 'two'], [3, 'three'], [1, 'four'] ]) let myMap2 = new Map() 2. size属性 获取元素个数 由原创 2022-03-19 12:26:09 · 970 阅读 · 0 评论 -
Leetcode20有效的括号(栈的经典使用示例)
Leetcode20有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。答题/** \* @param {string} s \* @return {boolean} */var isValid = function(s) { let queue = [] let left = ['(','{','['] let map = {原创 2022-03-16 23:20:41 · 152 阅读 · 0 评论 -
Leetcode剑指offer16不含有重复字符的最长子字符串
Leetcode16不含有重复字符的最长子字符串给定一个字符串 s ,请你找出其中不含有重复字符的 最长连续子字符串 的长度。答题:/** \* @param {string} s \* @return {number} */var lengthOfLongestSubstring = function(s) { let queue = [] let maxLen = 0 for(let i=0;i<s.length;i++){ if(queue.includes原创 2022-03-15 23:36:09 · 207 阅读 · 0 评论 -
JavaScript中数组的splice方法和slice方法详解
JavaScript中数组的splice方法和slice方法详解最近在做一些算法题,不能说不知道splice方法和slice方法怎么用,但是总是写出来有点点小问题,干脆就整理一下,再试两个小例子写一篇文章,彻底弄明白。splice方法splice() 方法通过删除现有元素和/或添加新元素来更改一个数组的内容。一般使用的格式是这样的array.splice(start)array.splice(start, deleteCount)array.splice(start, deleteCount,原创 2022-03-14 22:43:39 · 1464 阅读 · 0 评论 -
Leetcode3无重复字符的最长子串(滑动窗口解法)
Leetcode3无重复字符的最长子串(滑动窗口解法)给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。答题:/** \* @param {string} s \* @return {number} */var lengthOfLongestSubstring = function (s) { let arr = [], max = 0 for(let i = 0; i < s.length; i++) { let index = arr.indexO原创 2022-03-13 22:50:34 · 273 阅读 · 0 评论 -
Leetcode120三角形最小路径和
Leetcode120三角形最小路径和给定一个三角形 triangle ,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。答题:/** \* @param {number[][]} triangle \* @return {number} */var minimumTotal =原创 2022-03-13 07:39:38 · 179 阅读 · 0 评论 -
Leetcode77组合(回溯求解)
Leetcode77组合(回溯求解)给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。答题 * @param {number} n * @param {number} k * @return {number[][]} */ var combine = function(n, k) { const res = []; const stack = []; function backtrack(start)原创 2022-03-11 23:39:47 · 136 阅读 · 0 评论 -
Leetcode994腐烂的橘子(广度搜索法)
Leetcode994腐烂的橘子在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一:值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。答题:/** \* @param {number[][]} grid \* @return {number} */var orangesRotting = function(grid) { let m = grid.length let n =原创 2022-03-10 22:38:19 · 213 阅读 · 0 评论 -
Leetcode542:矩阵(广度遍历解法)
给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。两个相邻元素间的距离为 1 。答题/** * @param {number[][]} mat * @return {number[][]} */ var updateMatrix = function(mat) { let map = new Array(mat.length); // 用于输出的数组 let quque = [];原创 2022-03-09 22:07:43 · 237 阅读 · 0 评论 -
Leetcode733:图像渲染(广度遍历解法)
Leetcode733:图像渲染(广度遍历解法)题目:有一幅以 m x n 的二维整数数组表示的图画 image ,其中 image[i][j] 表示该图画的像素值大小。…上一篇文章用深度遍历的方法解了一下这道题,后来觉得应该再用深度遍历的方法解决一下,避免自己只学到套路没懂得思想。今天给一个广度遍历的解法答题:var floodFill = function(image, sr, sc, newColor) { let lineLen=image.length, rowLine=im原创 2022-03-08 22:30:15 · 6065 阅读 · 0 评论 -
Leetcode733:图像渲染(深度遍历解法)
题目:有一幅以 m x n 的二维整数数组表示的图画 image ,其中 image[i][j] 表示该图画的像素值大小。…解法:var floodFill = function(image, sr, sc, newColor) { const initialColor = image[sr][sc] function flood(image,sr,sc){ if(sr<0 || sc<0 ||sr>= image.length||sc>= i原创 2022-03-07 22:26:41 · 120 阅读 · 0 评论 -
二分法的左右边界
二分法的左右边界二分法用起来还是挺好用的,就是每次我总是纠结边界条件到底如何确定,用小于号还是小于等于号,满足条件后left是mid还是mid+1,为此专门做了两道简单题,整理了下思路。题目一给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法var searchInsert = function(nums, target) { let left = 0 let right原创 2022-03-02 22:19:42 · 327 阅读 · 0 评论