Array
文章平均质量分 58
数组问题(二分查找、双指针等)
NLP_victor
这个作者很懒,什么都没留下…
展开
-
数组-LeetCode2016. 增量元素之间的最大差值
1、题目描述力扣链接给你一个下标从 0 开始的整数数组 nums ,该数组的大小为 n ,请你计算 nums[j] - nums[i] 能求得的 最大差值 ,其中 0 <= i < j < n 且 nums[i] < nums[j] 。返回 最大差值 。如果不存在满足要求的 i 和 j ,返回 -1 。2、代码详解举一反三DP、贪心-LeetCode121. 买卖股票的最佳时机(k = 1)public class maximumDifference2016 {原创 2022-02-26 19:09:09 · 450 阅读 · 0 评论 -
LeetCode1423. 可获得的最大点数(滑动窗口)
1、题目描述https://leetcode-cn.com/problems/maximum-points-you-can-obtain-from-cards/几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。你的点数就是你拿到手中的所有卡牌的点数之和。给你一个整数数组 cardPoints 和整数 k,请你返回可以获得的最大点数。输入:cardPoints = [原创 2021-02-10 23:47:20 · 246 阅读 · 0 评论 -
LeetCode665. 非递减数列(分类讨论)
1、题目描述https://leetcode-cn.com/problems/non-decreasing-array/给你一个长度为n的整数数组,请你判断在 最多 改变1 个元素的情况下,该数组能否变成一个非递减数列。定义一个非递减数列的:对于数组中任意的i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。输入: nums = [4,2,3]输出: true解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。...原创 2021-02-10 22:55:30 · 217 阅读 · 0 评论 -
LeetCode643. 子数组最大平均数 I(前缀和、滑动窗口)
1、题目描述https://leetcode-cn.com/problems/maximum-average-subarray-i/给定n个整数,找出平均数最大且长度为k的连续子数组,并输出该最大平均数。输入:[1,12,-5,-6,50,3], k = 4输出:12.75解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.752、代码详解法一:前缀和先遍历一次,求数组每个位置的 preSum,然后再遍历一次,求长度为 k 的每个区间的最大和。最...原创 2021-02-05 22:46:12 · 498 阅读 · 0 评论 -
LeetCode480. 滑动窗口中位数(二分查找)
1、题目描述https://leetcode-cn.com/problems/sliding-window-median/中位数是有序序列最中间的那个数。如果序列的长度是偶数,则没有最中间的数;此时中位数是最中间的两个数的平均数。[2,3,4],中位数是3 [2,3],中位数是 (2 + 3) / 2 = 2.5给你一个数组 nums,有一个长度为 k 的窗口从最左端滑动到最右端。窗口中有 k 个数,每次窗口向右移动 1 位。你的任务是找出每次窗口移动后得到的新窗口中元素的中位数,并输.原创 2021-02-03 23:04:40 · 214 阅读 · 1 评论 -
LeetCode888. 公平的糖果棒交换(两数之和变形)
1、题目描述https://leetcode-cn.com/problems/fair-candy-swap/爱丽丝和鲍勃有不同大小的糖果棒:A[i] 是爱丽丝拥有的第 i 根糖果棒的大小,B[j] 是鲍勃拥有的第 j 根糖果棒的大小。 因为他们是朋友,所以他们想交换一根糖果棒,这样交换后,他们都有相同的糖果总量。(一个人拥有的糖果总量是他们拥有的糖果棒大小的总和。)返回一个整数数组 ans,其中 ans[0] 是爱丽丝必须交换的糖果棒的大小,ans[1]是 Bob 必须交换的糖果棒的大小.原创 2021-02-01 18:14:02 · 259 阅读 · 1 评论 -
LeetCode287. 寻找重复数(二分)
1、题目描述https://leetcode-cn.com/problems/find-the-duplicate-number/给定一个包含n + 1 个整数的数组nums ,其数字都在 1 到 n之间(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,找出 这个重复的数 。nums.length == n + 1 1 <= nums[i] <= n nums中只有一个整数出现两次或多次,其余整数均只出现一次进阶:...原创 2021-01-31 21:31:32 · 298 阅读 · 2 评论 -
LeetCode20. 有效的括号isValid(栈)
1、题目描述2、代码详解import java.util.Stack;public class isValid_20 { public static void main(String[] args){ String s = "{[]}"; System.out.println(isValid(s)); } public s...原创 2020-03-28 18:56:09 · 463 阅读 · 0 评论 -
LeetCode49. 字母异位词分组(哈希表、字典)
1、题目描述https://leetcode-cn.com/problems/group-anagrams/给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。输入: ["eat", "tea", "tan", "ate", "nat", "bat"]输出:[ ["ate","eat","tea"], ["nat","tan"], ["bat"]]所有输入均为小写字母。 不考虑答案输出的顺序。2、代码详解先排序,再用字典di..原创 2020-12-14 10:52:04 · 332 阅读 · 1 评论 -
LeetCode217. 存在重复元素(哈希)
1、题目描述https://leetcode-cn.com/problems/contains-duplicate/给定一个整数数组,判断是否存在重复元素。如果任意一值在数组中出现至少两次,函数返回true。如果数组中每个元素都不相同,则返回false。输入: [1,2,3,1]输出: true输入: [1,2,3,4]输出: false输入: [1,1,1,3,3,4,3,2,4,2]输出: true2、代码详解哈希:用字典记录以及访问的元素O...原创 2020-12-13 16:22:16 · 224 阅读 · 0 评论 -
LeetCode861. 翻转矩阵后的得分(贪心)
1、题目描述https://leetcode-cn.com/problems/score-after-flipping-matrix/有一个二维矩阵A 其中每个元素的值为0或1。移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 0。在做出任意次数的移动后,将该矩阵的每一行都按照二进制数来解释,矩阵的得分就是这些数字的总和。返回尽可能高的分数。输入:[[0,0,1,1],[1,0,1,0],[1,1,0,0]]输出:39...原创 2020-12-07 22:12:43 · 249 阅读 · 0 评论 -
LeetCode118. 杨辉三角(Python)
1、题目描述https://leetcode-cn.com/problems/pascals-triangle/给定一个非负整数numRows,生成杨辉三角的前numRows行。在杨辉三角中,每个数是它左上方和右上方的数的和。输入: 5输出:[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]2、代码详解当前一行只比上一行多了一个元素,最最关键的一点:本行元素等于上一行元素往后错一位再逐个相加只要...原创 2020-12-06 19:49:46 · 270 阅读 · 0 评论 -
LeetCode321. 拼接最大数(单调栈、分治)
1、题目描述给定长度分别为m和n的两个数组,其元素由0-9构成,表示两个自然数各位上的数字。现在从这两个数组中选出 k (k <= m + n)个数字拼接成一个新的数,要求从同一个数组中取出的数字保持其在原数组中的相对顺序。求满足该条件的最大数。结果返回一个表示该最大数的长度为k的数组。输入:nums1 = [6, 7]nums2 = [6, 0, 4]k = 5输出:[6, 7, 6, 0, 4]输入:nums1 = [3, 9]nums2 =...原创 2020-12-02 21:39:34 · 289 阅读 · 0 评论 -
LeetCode402. 移掉K位数字(单调栈)
1、题目描述https://leetcode-cn.com/problems/remove-k-digits/给定一个以字符串表示的非负整数num,移除这个数中的k位数字,使得剩下的数字最小。输入: num = "1432219", k = 3输出: "1219"解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。输入: num = "10200", k = 1输出: "200"解释: 移掉首位的 1 剩下的数字为 200. 注意输出不能有任何前导...原创 2020-12-02 18:26:01 · 349 阅读 · 2 评论 -
LeetCode767. 重构字符串(贪心+Count)
1、题目描述https://leetcode-cn.com/problems/reorganize-string/给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。若可行,输出任意可行的结果。若不可行,返回空字符串。输入: S = "aab"输出: "aba"输入: S = "aaab"输出: ""S只包含小写字母并且长度在[1, 500]区间内。2、代码详解基于计数的贪心算法贪心的思想,想明白这个就解出来了。 判断解存在很容易,出现次数最多..原创 2020-12-01 11:37:47 · 236 阅读 · 0 评论 -
LeetCode454. 四数相加 II(哈希)
1、题目描述https://leetcode-cn.com/problems/4sum-ii/给定四个包含整数的数组列表A , B , C , D ,计算有多少个元组 (i, j, k, l),使得A[i] + B[j] + C[k] + D[l] = 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度N,且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 - 1 之间,最终结果不会超过231 - 1 。输入:A = [ 1, 2]B = [...原创 2020-11-29 21:33:28 · 359 阅读 · 1 评论 -
LeetCode976. 三角形的最大周长(Python)
1、题目描述https://leetcode-cn.com/problems/largest-perimeter-triangle/给定由一些正数(代表长度)组成的数组A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。如果不能形成任何面积不为零的三角形,返回0。输入:[2,1,2]输出:5输入:[1,2,1]输出:0输入:[3,2,3,4]输出:10输入:[3,6,2,3]输出:83 <= A.length <= 10000 1 &..原创 2020-11-29 21:12:33 · 279 阅读 · 0 评论 -
LeetCode493. 翻转对(归并排序)
1、题目描述https://leetcode-cn.com/problems/reverse-pairs/给定一个数组nums,如果i < j且nums[i] > 2*nums[j]我们就将(i, j)称作一个重要翻转对。你需要返回给定数组中的重要翻转对的数量。输入: [1,3,2,3,1]输出: 2输入: [2,4,3,5,1]输出: 3给定数组的长度不会超过50000。 输入数组中的所有数字都在32位整数的表示范围内。2、代码详解...原创 2020-11-29 17:19:49 · 203 阅读 · 0 评论 -
LeetCode164. 最大间距(桶排序)
1、题目描述https://leetcode-cn.com/problems/maximum-gap/给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。如果数组元素个数小于 2,则返回 0。输入: [3,6,9,1]输出: 3解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。输入: [10]输出: 0解释: 数组元素个数小于 2,因此返回 0。你可以假设数组中所有元素都是非负整数,且数值在 32原创 2020-11-26 22:14:01 · 310 阅读 · 2 评论 -
LeetCode452. 用最少数量的箭引爆气球(排序+贪心、区间问题)
1、题目描述https://leetcode-cn.com/problems/minimum-number-of-arrows-to-burst-balloons/在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且原创 2020-11-24 16:07:13 · 223 阅读 · 0 评论 -
LeetCod75.颜色分类(荷兰国旗问题)(Python)
1、题目描述给定一个包含红色、白色和蓝色,一共n个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决方案是使用计数排序...原创 2019-03-10 20:11:42 · 533 阅读 · 0 评论 -
LeetCode134. 加油站(逻辑题)
1、题目描述https://leetcode-cn.com/problems/gas-station/在一条环路上有N个加油站,其中第i个加油站有汽油gas[i]升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1个加油站需要消耗汽油cost[i]升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:如果题目有解,该答案即为唯一答案。 输入数组均为非空数组,且长度相同。 输入数组中...原创 2020-11-19 15:32:59 · 438 阅读 · 0 评论 -
LeetCode—Python—283. 移动零(双指针)
1、题目描述https://leetcode-cn.com/problems/move-zeroes/https://leetcode.com/problems/move-zeroes/给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上...原创 2019-09-17 15:18:55 · 196 阅读 · 0 评论 -
LeetCode1207. 独一无二的出现次数(dict)
1、题目描述https://leetcode-cn.com/problems/unique-number-of-occurrences/给你一个整数数组arr,请你帮忙统计数组中每个数的出现次数。如果每个数的出现次数都是独一无二的,就返回true;否则返回false。输入:arr = [1,2,2,1,1,3]输出:true解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。输入:arr = [1,2]输出:fals...原创 2020-10-28 23:05:46 · 245 阅读 · 0 评论 -
LeetCode1365. 有多少小于当前数字的数字(计数排序)
1、题目描述https://leetcode-cn.com/problems/how-many-numbers-are-smaller-than-the-current-number/给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。 换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。 以数组形式返回答案。输入:nums = [8,1,2,2..原创 2020-10-26 22:56:28 · 237 阅读 · 0 评论 -
LeetCode845. 数组中的最长山脉(双指针技巧)
1、题目描述https://leetcode-cn.com/problems/longest-mountain-in-array/我们把数组 A 中符合下列属性的任意连续子数组 B 称为 “山脉”:B.length >= 3 存在 0 < i< B.length - 1 使得 B[0] < B[1] < ... B[i-1] < B[i] > B[i+1] > ... > B[B.length - 1](注意:B 可以是 A 的任意子数.原创 2020-10-25 21:29:49 · 414 阅读 · 0 评论 -
双指针-LeetCode977. 有序数组的平方
1、题目描述https://leetcode-cn.com/problems/squares-of-a-sorted-array/给定一个按非递减顺序排序的整数数组A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。输入:[-4,-1,0,3,10]输出:[0,1,9,16,100]输入:[-7,-3,2,3,11]输出:[4,9,9,49,121]1 <= A.length <= 10000 -10000 <= A[i] <= 10000 .原创 2020-10-17 23:11:48 · 226 阅读 · 0 评论 -
LeetCode37. 解数独(回溯+set)
1、题目描述https://leetcode-cn.com/problems/sudoku-solver/编写一个程序,通过已填充的空格来解决数独问题。一个数独的解法需遵循如下规则:数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。空白格用'.'表示。from typing import Listclass Solution: def solveSudoku(sel...原创 2020-09-15 23:46:19 · 236 阅读 · 0 评论 -
LeetCode128. 最长连续序列([100, 4, 200, 1, 3, 2],最长连续序列是 [1, 2, 3, 4])
1、题目描述https://leetcode-cn.com/problems/single-number/给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为O(n)。输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。2、代码详解解题思路:dict模拟哈希表,题目要求 O(n)复杂度。用哈希表存储每个端点值对应连续区间的长度若数已在哈希表中:跳过不做处理若是新数加入:取出.原创 2020-09-14 23:36:17 · 452 阅读 · 0 评论 -
LeetCode136. 只出现一次的数字(异或)
1、题目描述https://leetcode-cn.com/problems/single-number/给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?输入: [2,2,1]输出: 1输入: [4,1,2,1,2]输出: 42、代码详解解法1:使用快排,复杂度O(nlogn)解法2:利用 Hash 表,Time:O(n) Space:...原创 2020-09-14 22:41:47 · 271 阅读 · 0 评论 -
LeetCode78. 子集+90. 子集 II(回溯)
78. 子集https://leetcode-cn.com/problems/subsets/给定一组不含重复元素的整数数组nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。输入: nums = [1,2,3]输出: [[], [1], [1, 2], [1, 2, 3], [1, 3], [2], [2, 3], [3]]回溯代码class Solution(object): def subsets(self, nums): .原创 2020-09-13 23:00:23 · 187 阅读 · 0 评论 -
LeetCode48. 旋转图像(Python)
1、题目描述https://leetcode-cn.com/problems/rotate-image/给定一个n×n的二维矩阵表示一个图像。将图像顺时针旋转 90 度。必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。给定 matrix = [ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2], [9,6,3]]2、代码详解...原创 2020-09-13 22:32:20 · 208 阅读 · 0 评论 -
LeetCode84. 柱状图中最大的矩形+85. 最大矩形(单调栈)
1、题目描述https://leetcode-cn.com/problems/largest-rectangle-in-histogram/给定n个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。柱状图的示例,其中每个柱子的宽度为 1,给定的高度为[2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为10个单位。输入: [2,1,5,6,2,3]输出: 102、代码详...原创 2020-09-13 18:30:24 · 278 阅读 · 0 评论 -
LeetCode60. 第k个排列(规律题)
1、题目描述注:回溯法求全排列再输出第k-1位超时,所以此题找规律https://leetcode-cn.com/problems/permutation-sequence/给定n的范围是 [1, 9]。 给定k的范围是[1, n!]。输入: n = 3, k = 3输出: "213"输入: n = 4, k = 9输出: "2314"31. 下一个排列https://blog.csdn.net/IOT_victor/article/details/107465...原创 2020-09-05 23:28:26 · 232 阅读 · 0 评论 -
LeetCode238. 除自身以外数组的乘积(Python)
1、题目描述https://leetcode-cn.com/problems/product-of-array-except-self/给你一个长度为n的整数数组nums,其中n > 1,返回输出数组output,其中 output[i]等于nums中除nums[i]之外其余各元素的乘积。输入: [1,2,3,4]输出: [24,12,8,6]提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。 说明: ...原创 2020-08-29 19:41:32 · 361 阅读 · 0 评论 -
剑指Offer13. 机器人的运动范围DFS(Python)
一、题目描述https://leetcode-cn.com/problems/ji-qi-ren-de-yun-dong-fan-wei-lcof/地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38]原创 2020-08-27 15:59:52 · 244 阅读 · 0 评论 -
DFS、回溯-LeetCode491. 递增子序列
1、题目描述https://leetcode-cn.com/problems/increasing-subsequences/给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。输入: [4, 6, 7, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]给定数组的长度不会超过15。 数组中的整数范围是[-100,100]。 给定数组中.原创 2020-08-25 23:45:28 · 186 阅读 · 0 评论 -
3:数组中重复的数字(剑指offer第2版Python)
1、题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。2、代码详解对于一个长度为n的数组里所有的数字都在0到n-1的范围内。查找重复数字的话,首先容易想到...原创 2020-03-08 00:00:05 · 257 阅读 · 0 评论 -
滑动窗口-LeetCode76. 最小覆盖子串
1、题目描述https://leetcode-cn.com/problems/minimum-window-substring/2、代码详解from collections import Counterfrom collections import defaultdictclass Solution: def minWindow(self, s, t): # 最短子串开始位置和长度 start, min_len = 0, float('Inf'.原创 2020-08-04 23:17:09 · 210 阅读 · 0 评论 -
DP-LeetCode221. 最大正方形
1、题目描述https://leetcode-cn.com/problems/maximal-square/在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。2、代码详解class Solution(object): def maximalSquare(self, matrix): if not matrix: return 0 res = 0 # 记录结果 # 定义d.原创 2020-07-29 22:50:53 · 158 阅读 · 0 评论