数组
文章平均质量分 93
earlene_wyl
这个作者很懒,什么都没留下…
展开
-
leetcode 31. 下一个排列 medium
leetcode31. 下一个排列 medium 题目描述:实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,...原创 2019-07-30 13:28:50 · 224 阅读 · 0 评论 -
leetcode 398. 随机数索引 medium (蓄水池)
leetcode398. 随机数索引medium 题目描述:给定一个可能含有重复元素的整数数组,要求随机输出给定的数字的索引。 您可以假设给定的数字一定存在于数组中。注意:数组大小可能非常大。 使用太多额外空间的解决方案将不会通过测试。示例:int[] nums = new int[] {1,2,3,3,3};Solution solution = n...原创 2019-10-13 23:00:51 · 179 阅读 · 0 评论 -
leetcode 384. 打乱数组 medium
leetcode 384. 打乱数组 medium 题目描述:打乱一个没有重复元素的数组。示例:// 以数字集合 1, 2 和 3 初始化数组。int[] nums = {1,2,3};Solution solution = new Solution(nums);// 打乱数组 [1,2,3] 并返回结果。任何 [1,2,3]的排列返回的概率应该相同。...原创 2019-10-13 23:26:26 · 185 阅读 · 0 评论 -
leetcode 560. 和为K的子数组 medium
leetcode560. 和为K的子数组 medium 题目描述:给定一个整数数组和一个整数k,你需要找到该数组中和为k的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000,...原创 2019-08-11 23:44:09 · 202 阅读 · 0 评论 -
leetcode 84. 柱状图中最大的矩形 hard (重要)
leetcode84. 柱状图中最大的矩形 hard (重要) 题目描述:给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为[2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为10个...原创 2019-08-12 00:26:00 · 260 阅读 · 0 评论 -
leetcode 75. 颜色分类 medium
leetcode75. 颜色分类 medium 题目描述:给定一个包含红色、白色和蓝色,一共n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: ...原创 2019-08-15 21:19:28 · 92 阅读 · 0 评论 -
leetcode 674. 最长连续递增序列 easy
leetcode674. 最长连续递增序列 easy 题目描述:给定一个未经排序的整数数组,找到最长且连续的的递增序列。示例 1:输入: [1,3,5,4,7]输出: 3解释: 最长连续递增序列是 [1,3,5], 长度为3。尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为5和7在原数组里被4隔开。示例 2:输入: [2,2,...原创 2019-08-15 21:49:17 · 146 阅读 · 0 评论 -
leetcode 85. 最大矩形 hard
leetcode85. 最大矩形 hard 题目描述:给定一个仅包含0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。示例:输入:[ ["1","0","1","0","0"], ["1","0","1","1","1"], ["1","1","1","1","1"], ["1","0","0","1","0"]]输...原创 2019-08-12 13:35:22 · 246 阅读 · 0 评论 -
leetcode 221. 最大正方形 medium
leetcode221. 最大正方形 medium 题目描述:在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入:1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4解题思路:方法一:第一反应就是用求最大矩形的方法做,也就是按行来求直方图的最大面积方法...原创 2019-08-12 14:50:50 · 172 阅读 · 0 评论 -
leetcode 239. 滑动窗口最大值 hard(重要)
leetcode239. 滑动窗口最大值 hard(重要) 题目描述:给定一个数组 nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,...原创 2019-08-16 21:33:32 · 319 阅读 · 0 评论 -
leetcode 325. 和等于 k 的最长子数组长度 medium (重要)
leetcode325. 和等于 k 的最长子数组长度medium (重要) 题目描述:给定一个数组 nums 和一个目标值 k,找到和等于 k 的最长子数组长度。如果不存在任意一个符合要求的子数组,则返回 0。注意:nums 数组的总和是一定在 32 位有符号整数范围之内的。示例 1:输入: nums = [1, -1, 5, -2, 3], k =...原创 2019-08-17 18:27:24 · 7012 阅读 · 0 评论 -
leetcode 303. 区域和检索 - 数组不可变 easy
leetcode303. 区域和检索 - 数组不可变easy 题目描述:给定一个整数数组 nums,求出数组从索引i到j(i≤j) 范围内元素的总和,包含i,j两点。示例:给定 nums = [-2, 0, 3, -5, 2, -1],求和函数为 sumRange()sumRange(0, 2) -> 1sumRange(2...原创 2019-08-17 18:49:07 · 121 阅读 · 0 评论 -
leetcode 347. 前 K 个高频元素 medium
leetcode347. 前 K 个高频元素 medium 题目描述:给定一个非空的整数数组,返回其中出现频率前k高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]说明:你可以假设给定的k总是合理的,且 1 ≤ k ≤ ...原创 2019-08-18 13:39:39 · 130 阅读 · 0 评论 -
leetcode 48. 旋转图像 medium
leetcode48. 旋转图像 medium 题目描述:给定一个 n×n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix =[ [1,2,3], [4,5,6], [7,8,9]],原地旋...原创 2019-08-18 14:13:38 · 125 阅读 · 0 评论 -
刷题(4)-数组-题目(2)
1.2-sum 问题 (重要)(剑指offer 57)题目描述:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。还可以是打印所有的or打印所有不重复的解题思路:总的来说,就是两个指针,一个指向头部,一个指向尾部,向中间扫描O(N)大小指针题!,注意对于一个指针而言,不同时刻它的移...原创 2019-09-07 23:20:23 · 207 阅读 · 0 评论 -
leetcode 36. 有效的数独 medium
leetcode36. 有效的数独 medium 题目描述:判断一个9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用...原创 2019-08-15 16:42:20 · 159 阅读 · 0 评论 -
leetcode 918. 环形子数组的最大和 medium
leetcode918. 环形子数组的最大和medium 题目描述:给定一个由整数数组 A表示的环形数组 C,求 C的非空子数组的最大可能和。在此处,环形数组意味着数组的末端将会与开头相连呈环状。(形式上,当0 <= i < A.length时C[i] = A[i],而当i >= 0时C[i+A.length] = C[i])...原创 2019-08-20 16:04:47 · 198 阅读 · 0 评论 -
leetcode 155. 最小栈 easy
leetcode155. 最小栈 easy 题目描述:设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x)-- 将元素 x 推入栈中。pop()-- 删除栈顶的元素。top()-- 获取栈顶元素。getMin() -- 检索栈中的最小元素。解题思路:做烂了代码://class MinStack ...原创 2019-08-20 01:35:27 · 144 阅读 · 0 评论 -
剑指offer. 40 最小的k个数 top(k)(重要)
剑指offer. 40 最小的k个数top(k)(重要)题目描述:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。解题思路:解法1:快速选择,定位下标为k-1的数,O(n)解法2:海量数据topk问题。大(小)顶堆(O(nlogk))假如求最小的k个,用大顶堆priority_qu...原创 2019-08-02 16:11:16 · 385 阅读 · 0 评论 -
剑指offer. 41 数据流中的中位数 (重要)
剑指offer. 41数据流中的中位数 (重要)题目描述:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。解题思路:用两个堆,一个大顶堆来维...原创 2019-08-02 16:24:15 · 127 阅读 · 0 评论 -
剑指offer. 42 连续子数组的最大和(重要)
剑指offer. 42连续子数组的最大和(重要)题目描述:输入一个整形数组,数组里有正数和负数。数组中的一个或连续多个整数数组做成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n),如:{1,-2,3,10,-4,7,2,-5}, 和最大的子数组是{3,10,-4,7,2},所以输出和 18解题思路:解法1:动态规划这种找子数组最优,一般解法是依次求以x...原创 2019-08-02 16:58:10 · 146 阅读 · 0 评论 -
剑指offer. 43 数字1的个数
剑指offer. 43数字1的个数题目描述:给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。示例:输入: 13输出: 6解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 。解题思路:解法1:挨个算1的次数 O(NlogN) (log以10为底)解法2:递归算左神p495 O(logn)神...原创 2019-08-02 21:13:53 · 244 阅读 · 0 评论 -
剑指offer. 45 把数组排成最小的数(重要)
剑指offer. 45把数组排成最小的数(重要)题目描述:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。解题思路:实际上只要定义一种排序规则即可:两个数a,b 假如 ab>ba,那a就大于b,而ab和ba的大小比较可以用字符串大小比较的规则...原创 2019-08-02 21:28:02 · 197 阅读 · 0 评论 -
剑指offer. 53 数字在排序数组中出现的次数
剑指offer. 53数字在排序数组中出现的次数题目描述:统计一个数字在排序数组中出现的次数。解题思路:分别用二分找到第一个k和最后一个k代码:class Solution {public: int GetNumberOfK(vector<int> data ,int k) { if(data.empty()) ...原创 2019-08-04 15:08:23 · 117 阅读 · 0 评论 -
剑指offer.4 二维数组的查找
剑指offer.4 二维数组的查找题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路:从数组的左下角or右上角出发均可下面的代码从右上角出发代码:class Solution {public: ...原创 2019-08-05 18:49:14 · 117 阅读 · 0 评论 -
剑指offer. 39 数组中出现次数超过一半的数字
剑指offer. 40 数组中出现次数超过一半的数字题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。解题思路:解法1:在无序数组中找到第k位的数字,用快速选择算法(O(N))题目要求是出现次数超过一半,那...原创 2019-08-02 15:01:49 · 137 阅读 · 0 评论 -
剑指offer. 21调整数组顺序使奇数位于偶数前面
剑指offer. 21调整数组顺序使奇数位于偶数前面题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解题思路:假如不用保证相对次序不变,就用快排的单向扫描partition就ojbk了,但是这个要求稳定性,那就再开一个数组,保存零时变量。...原创 2019-08-07 14:23:14 · 102 阅读 · 0 评论 -
剑指offer. 29 顺时针打印矩阵
剑指offer. 29顺时针打印矩阵题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.解题思路:用矩阵分圈处理,四个变量lr,lc,rr,rc...原创 2019-08-07 14:54:14 · 110 阅读 · 0 评论 -
leetcode 130. 被围绕的区域 medium
leetcode130. 被围绕的区域 medium 题目描述:给定一个二维的矩阵,包含'X'和'O'(字母 O)。找到所有被 'X' 围绕的区域,并将这些区域里所有的'O' 用 'X' 填充。示例:X X X XX O O XX X O XX O X X运行你的函数后,矩阵变为:X X X XX X X XX X X XX O ...原创 2019-08-14 14:12:18 · 186 阅读 · 0 评论 -
刷题(4)-位运算和数组-题目(1)
目录1.二进制中1的个数(剑指offer 15 )2.数值的整数次方 (剑指offer 16 )3.丑数(剑指offer 49 )4.求1-k以内的所有素数5.求1+2+3+...+n(剑指offer 64 )6.不用加减乘除做加法(剑指offer 65 )7.构建乘积数组(剑指offer 66)8.数组中重复的数字(剑指offer 3)...原创 2019-09-06 17:10:10 · 595 阅读 · 0 评论 -
刷题(3)-排序(1)
排序总结工程排序特点:1. 快速排序a) 三向切分快排,代码(主要)b)基本快排,随便看看吧c) 三数中值快排,且结合插入排序总结冒泡,插入,归并排序都是保证稳定性的,其他都不是现代操作系统很少使用堆排序,因为它无法利用局部性原理进行缓存,也就是数组元素很少和相邻的元素进行比较和交换。快速排序是最快的通用排序算法,它的内循环的指令很少,而且它还能利用缓存,因为它总是顺序地访问数据。...原创 2019-08-02 14:16:55 · 301 阅读 · 1 评论 -
刷题(3)-排序(2)
目录2. 归并排序 (稳定)3.冒泡排序(稳定)4.选择排序5.插入排序 (稳定)6. 希尔排序7. 堆排序8. 桶排序(不基于比较,稳定)8.1 计数排序8.2.基数排序(稳定)2. 归并排序 (稳定)复杂度: 时间O(NlogN) 空间O(N) 保证稳定性。思想:首先考虑一个数组 【first,mid】 【mid+1,last】都排好序了...原创 2019-08-04 12:38:22 · 643 阅读 · 0 评论 -
快速选择(O(n),找到无序数组任意第k大的数字)
int quickselect(vector<int> vec,int aim){ if(vec.size()<1 || vec.size()<aim || aim<0) return -1; int left=0,right=vec.size()-1; int index=partition(vec,left,right); while(index...原创 2019-08-02 15:43:51 · 310 阅读 · 0 评论