leetcode
文章平均质量分 66
微芒不朽
随心远行,宁静致远。
展开
-
【Leetcode 346/700】79. 单词搜索 【中等】 回溯深度搜索JavaScript版
【Leetcode 346/700】79. 单词搜索 【中等】 回溯深度搜索JavaScript版1.题目n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例 1:输入:board = [["A","B","C","E"],["S","F","C","S"],["A","原创 2022-05-13 23:27:44 · 244 阅读 · 0 评论 -
【leetcode】剑指 Offer II 105. 岛屿的最大面积-【深度优先DFS】
给定一个由 0 和 1 组成的非空二维数组 grid ,用来表示海洋岛屿地图。一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。找到给定的二维数组中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。示例 1:输入: grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,原创 2022-04-10 00:18:16 · 265 阅读 · 0 评论 -
速算24 -JavaScript-穷举
给定任意4个自然数,请给出通过4则运算,使结果为24的算法,并且每个数在算式中使用一次。如果无法通过上述规则得到24,则输出“无法计算得到24”。如果给出4个数为2、3、4、5,程序的输出结果应是一个表达式:(5+3-2)*4如果给出的4个数是1、1、1、1,程序的输出结果应该是:无法计算得到24要求:提交算法思路即可。思路:先分析一下穷举包含多少种情况:1、操作数。由于是给定的4个数,所以把这个4个数进行全排列,共有:24种2、运算符。4个数之间有3个运算符,每个运算符有4种选择,共有:64原创 2022-03-10 09:05:41 · 1039 阅读 · 0 评论 -
一看就懂,一写就懵?搞懂回溯算法,一口气刷了20多道题
一、回溯算法1.1什么是回溯?回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。——摘自《百度百科》1.1 一般步骤:针对所给问题,定义问题的解空间,它至少包含问题的一个(最优)解。确定易于搜索的解空间结构,使得能用回溯法方便地搜索整个解空间 。以深度优先的方式搜索解空间,并且在搜索过程中用剪枝函数避免无效搜索。1.2 如何理解回溯算法?为问题建立解空间结构在解空间结构上进行DFS搜索设立回溯出口原创 2021-12-26 16:38:14 · 497 阅读 · 0 评论 -
Leetcode 通过率最高的困难题 N皇后 II 【回溯解法-剪枝】
使用回溯的具体做法是:依次在每一行放置一个皇后,每次新放置的皇后都不能和已经放置的皇后之间有攻击,即新放置的皇后不能和任何一个已经放置的皇后在同一列以及同一条斜线上。当 NNN 个皇后都放置完毕,则找到一个可能的解,将可能的解的数量加 111。原创 2021-12-12 12:19:04 · 1806 阅读 · 2 评论 -
[LeetCode264. 丑数 II] 三指针 | 刷题打卡[2]
一、题目描述:给你一个整数 n ,请你找出并返回第 n 个 丑数 。丑数 就是只包含质因数 2、3 和/或 5 的正整数二、思路分析:三指针1.2,3,5分别对应指针i2,i3,i5,遍历找到当前指针2.移动i对于的当前指针,并记录结果3.找到数组最后一位即是第n个丑数三、AC 代码:javascript/** * @param {number} n * @return {number} */var nthUglyNumber = function (n) { let .原创 2021-04-11 15:17:37 · 77 阅读 · 0 评论 -
[LeetCode连续子数组的最大和] | 刷题打卡[1]
一、题目描述:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。二、思路分析:动态规划1.从数组第一个元素开始,分别累加数组的元素2.当求和到当前元素为负数和时,重新计算下一轮数组和,并记录当前的最大和***3.比较每轮数组和,返回最大值;***三、AC 代码:javascript/** * @param {number[]} nums * @return {number} */var maxSubArray = f.原创 2021-04-10 23:22:21 · 141 阅读 · 0 评论 -
Golang语言[6] 递增的三元子序列/笨阶乘/矩阵查找/直方图的水量 |Go主题月
递增的三元子序列给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。示例 1:输入:nums = [1,2,3,4,5]输出:true解释:任何 i < j < k 的三元组都满足题意示例 2:输入:nums = [5,4,3,2,1]输出:f.原创 2021-04-05 22:24:27 · 158 阅读 · 0 评论 -
【算法】[困难]-直方图的水量-动态规划
17.21. 直方图的水量难度:[困难]给定一个直方图(也称柱状图),假设有人从上面源源不断地倒水,最后直方图能存多少水量?直方图的宽度为 1。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的直方图,在这种情况下,可以接 6 个单位的水(蓝色部分表示水)。 感谢 Marcos 贡献此图。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6【思路】动态规划1.记录height中的每个元素,从左向右扫描并记录右边的最大高度;2.记录height原创 2021-04-02 20:24:13 · 179 阅读 · 0 评论 -
【算法】搜索二维矩阵 暴力解法&二分法 4种语言
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。示例 1:输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3输出:true示例 2:输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13输出:false提示: m ==.原创 2021-03-30 22:58:14 · 207 阅读 · 0 评论 -
【贪心算法】空酒瓶换酒问题
小区便利店正在促销,用 numExchange 个空酒瓶可以兑换一瓶新酒。你购入了 numBottles 瓶酒。如果喝掉了酒瓶中的酒,那么酒瓶就会变成空的。请你计算 最多 能喝到多少瓶酒。示例 1:输入:numBottles = 9, numExchange = 3输出:13解释:你可以用 3 个空酒瓶兑换 1 瓶酒。所以最多能喝到 9 + 3 + 1 = 13 瓶酒。示例 2:输入:numBottles = 15, numExchange = 4输出:19解释:你可以用 4 个空.原创 2020-09-22 19:12:32 · 1629 阅读 · 1 评论 -
【贪心算法】按要求补齐数组
给定一个已排序的正整数数组 nums,和一个正整数 n 。从 [1, n] 区间内选取任意个数字补充到 nums 中,使得 [1, n] 区间内的任何数字都可以用 nums 中某几个数字的和来表示。请输出满足上述要求的最少需要补充的数字个数。示例 1:输入: nums = [1,3], n = 6输出: 1 解释:根据 nums 里现有的组合 [1], [3], [1,3],可以得出 1, 3, 4。现在如果我们将 2 添加到 nums 中, 组合变为: [1], [2], [3], [1,3.原创 2020-09-22 19:10:30 · 153 阅读 · 0 评论 -
【贪心算法】找到买卖股票的最佳时机
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价原创 2020-08-27 22:45:58 · 195 阅读 · 0 评论 -
数组中重复的数字 4种解法
找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 限制:2 <= n <= 1000001.排序var findRepeatNumber = function (nums) { nums.sort((a,b)=>a-b) .原创 2020-08-22 13:28:33 · 669 阅读 · 0 评论 -
各位相加 循环&归纳法
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。示例:输入: 38输出: 2 解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。进阶:你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?循环:var addDigits = function (num) { var res = num.toString().split('').reduce((accur, cur) => accur+原创 2020-08-12 19:27:33 · 163 阅读 · 0 评论 -
最大三角形面积 鞋带公式& 海伦公式
给定包含多个点的集合,从其中取三个点组成三角形,返回能组成的最大三角形的面积。示例:输入: points = [[0,0],[0,1],[1,0],[0,2],[2,0]]输出: 2解释: 这五个点如下图所示。组成的橙色三角形是最大的,面积为2。注意: 3 <= points.length <= 50. 不存在重复的点。 -50 <= points[i][j] <= 50. 结果误差值在 10^-6 以内都认为是正确答案。思路:.原创 2020-08-10 20:08:54 · 1011 阅读 · 0 评论 -
前端算法-杨辉三角 动态规划法
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 5输出:[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]分析思路:找规律1.每一行前后元素都是12.中间的元素等于上面元素和上面左边元素之和,即temp[j] = res[i - 1][j - 1] + res[i - 1][j]解题代码/** * @param {numb.原创 2020-08-09 22:27:29 · 177 阅读 · 0 评论 -
前端算法 岛屿的最大面积 DFS(深度优先搜索)
给定一个包含了一些 0 和 1 的非空二维数组 grid 。一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 0 。)示例 1:[[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,1,1,0,0,0], [0,1,1,0,1,0,0,0,0,0,0,0,0], [0原创 2020-08-09 12:52:31 · 372 阅读 · 0 评论 -
【leetcode】204. 计数质数 暴力 & 埃拉托斯特尼法
统计所有小于非负整数 n 的质数的数量。示例:输入: 10输出: 4解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。js暴力解法:/** * @param {number} n * @return {number} */var countPrimes = function(n) { var count = 0; function isPrime(num){ for(var i=2;i<=Math.sqrt(num);i++){ if(原创 2020-08-08 18:17:48 · 101 阅读 · 0 评论 -
【leetcode】221. 最大正方形 动态规划法
在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4动态规划法分析:我们用 dp(i,j)dp(i, j)dp(i,j) 表示以 (i,j)(i, j)(i,j) 为右下角,且只包含 111 的正方形的边长最大值。如果我们能计算出所有 dp(i,j)dp(i, j)dp(i,j) 的值,那么其中的最大值即为矩阵中只包含 111 的正方形的边长最大值,其平方原创 2020-08-08 18:17:03 · 162 阅读 · 0 评论