数组
数组相关算法
二进制杯莫停
欲速则不达,慢而有为
展开
-
剑指 Offer 57 - II. 和为s的连续正数序列(简单)
剑指 Offer 57 - II. 和为s的连续正数序列题目描述源码方法一:数学计算方法二:滑动窗口Leetcode链接:剑指 Offer 57 - II. 和为s的连续正数序列题目描述输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5]原创 2021-09-20 14:02:04 · 187 阅读 · 0 评论 -
剑指 Offer 57. 和为s的两个数字(简单)
Leetcode链接:剑指 Offer 57. 和为s的两个数字题目描述输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [30,10]限制:1 <= nums.leng原创 2021-09-09 20:56:12 · 81 阅读 · 0 评论 -
剑指 Offer 53 - I. 在排序数组中查找数字 I(简单)
Leetcode链接:剑指 Offer 53 - I. 在排序数组中查找数字 I题目描述统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0提示:0 <= nums.length <= 105-109 <= nums[i] <= 109nums 是一个非递减数组-109 <原创 2021-09-08 20:47:11 · 67 阅读 · 0 评论 -
剑指 Offer 39. 数组中出现次数超过一半的数字(简单)
Leetcode链接:剑指 Offer 39. 数组中出现次数超过一半的数字题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2限制:1 <= 数组长度 <= 50000源码摩尔投票法class Solution { public int majorityElement(int[] nums) {原创 2021-09-08 09:39:26 · 88 阅读 · 0 评论 -
剑指 Offer 29. 顺时针打印矩阵(简单)
Leetcode链接:剑指 Offer 29. 顺时针打印矩阵题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]限制:0 <= matrix.length <原创 2021-09-08 00:18:15 · 106 阅读 · 0 评论 -
剑指 Offer 17. 打印从1到最大的n位数(简单)
Leetcode链接:剑指 Offer 17. 打印从1到最大的n位数题目描述输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1输出: [1,2,3,4,5,6,7,8,9]说明:用返回一个整数列表来代替打印n 为正整数源码class Solution { public int[] printNumbers(int n) { int end = (原创 2021-09-07 23:45:39 · 85 阅读 · 0 评论 -
剑指 Offer 11. 旋转数组的最小数字(简单)
Leetcode链接:剑指 Offer 11. 旋转数组的最小数字题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0源码class Solution { public int minArray(int[]原创 2021-09-07 23:40:57 · 80 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找(中等)
Leetcode链接:剑指 Offer 04. 二维数组中的查找题目描述在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定 targe原创 2021-09-07 23:33:28 · 76 阅读 · 0 评论 -
283. 移动零(简单)
Leetcode链接:283. 移动零题目描述给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。题解 – 双指针官方解法解释:left指针标记非0数字应该存放的位置right遇到一个不为0的数字就替换到left的指针,然后left++right++class Solution {原创 2021-08-28 12:42:22 · 106 阅读 · 0 评论 -
153. 寻找旋转排序数组中的最小值(中等) 剑指 Offer 11. 旋转数组的最小数字(简单)154. 寻找旋转排序数组中的最小值 II(困难)
Leetcode链接:剑指 Offer 11. 旋转数组的最小数字、154. 寻找旋转排序数组中的最小值 II题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0提示:n == nums.length1 &l原创 2021-08-27 11:01:44 · 93 阅读 · 0 评论 -
119. 杨辉三角 II(简单)
Leetcode链接:119. 杨辉三角 II题目描述给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。示例 1:输入: rowIndex = 3输出: [1,3,3,1]示例 2:输入: rowIndex = 0输出: [1]示例 3:输入: rowIndex = 1输出: [1,1]提示:0 <= rowIndex <= 33解法一:暴力解法,使用构造杨辉三角所有原创 2021-08-23 10:21:12 · 177 阅读 · 0 评论 -
485. 最大连续 1 的个数(简单)
Leetcode链接:485. 最大连续 1 的个数题目描述给定一个二进制数组, 计算其中最大连续 1 的个数。示例:输入:[1,1,0,1,1,1]输出:3解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.提示:输入的数组只包含 0 和 1 。输入数组的长度是正整数,且不超过 10,000。源码:class Solution { public int findMaxConsecutiveOnes(int[] nums) {原创 2021-08-22 14:55:52 · 85 阅读 · 0 评论 -
209. 长度最小的子数组(中等)
Leetcode链接:209. 长度最小的子数组题目描述给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr],并返回其长度。如果不存在符合条件的子数组,返回 0 。示例 1:输入:target = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。示例 2:输入:target原创 2021-08-22 14:51:35 · 425 阅读 · 0 评论 -
27. 移除元素(简单)
Leetcode链接:27. 移除元素题目描述给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:输入:nums = [3,2,2,3], val = 3输出:2, nums = [2,2]解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑原创 2021-08-22 14:45:11 · 197 阅读 · 0 评论 -
167. 两数之和 II - 输入有序数组(简单)
Leetcode链接:167. 两数之和 II - 输入有序数组题目描述给定一个已按照升序排列的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。函数应该以长度为2的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例 1:原创 2021-08-22 14:40:47 · 64 阅读 · 0 评论 -
561. 数组拆分
Leetcode链接:561. 数组拆分题目描述给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从 1 到 n 的 min(ai, bi) 总和最大。返回该 最大总和。示例 1:输入:nums = [1,4,3,2]输出:4解释:所有可能的分法(忽略元素顺序)为:(1, 4), (2, 3) -> min(1, 4) + min(2, 3) = 1 + 2 = 3(1, 3原创 2021-08-22 14:34:46 · 87 阅读 · 0 评论 -
344. 反转字符串(简单)
反转字符串题目描述编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]示例 2:输入:["H","a","n","n","a","h"]输出:["h","a","n","n","原创 2021-08-22 14:29:23 · 97 阅读 · 0 评论 -
剑指 Offer 39. 数组中出现次数超过一半的数字
剑指 Offer 39. 数组中出现次数超过一半的数字数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2限制:1 <= 数组长度 <= 50000解题思路:解题思路:本题常见解法如下:(1)哈希表统计法: 遍历数组 nums ,用 HashMap 统计各数字的数量,最终超过数组长度一半的数字则为众数。此方法时间和空间复杂原创 2020-08-01 17:50:40 · 89 阅读 · 0 评论 -
628. 三个数的最大乘积
三个数的最大乘积给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。示例 1:输入: [1,2,3]输出: 6示例 2:输入: [1,2,3,4]输出: 24注意:给定的整型数组长度范围是[3,10^4],数组中所有的元素范围是[-1000, 1000]。输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。解方法一:排序法(1)对数组进...原创 2020-04-15 21:20:12 · 137 阅读 · 0 评论 -
448. 找到所有数组中消失的数字
找到所有数组中消失的数字给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入:[4,3,2,7,8,2,3,1]输出:[5,6...原创 2020-04-14 21:55:25 · 142 阅读 · 0 评论