数据结构-数组
xushiyu1996818
这个作者很懒,什么都没留下…
展开
-
leetcode-059-螺旋矩阵2
如果 left<right 且 top<bottom,则从右到左填入下侧元素,依次为 (bottom,right−1) 到 (bottom,left+1),以及从下到上填入左侧元素,依次为 (bottom,left) 到 (top+1,left)。填完当前层的元素之后,将 left 和 top 分别增加 1,将 right 和 bottom 分别减少 1,进入下一层继续填入元素,直到填完所有元素为止。可以将矩阵看成若干层,首先填入矩阵最外层的元素,其次填入矩阵次外层的元素,直到填入矩阵最内层的元素。原创 2023-06-10 20:13:47 · 663 阅读 · 0 评论 -
leetcode-057-插入区间
然后,再看右边,这里有个情况,就是 当intervals[i][0] > newInterval[1]说明newInterval没有和任何区间重合,比如intervals = [[1,3],[6,9]], newInterval = [4,5],直接插入即可.首先,左边,当newInterval[0] > intervals[i][1]说明没有和该区间没有重叠部分,继续遍历下一个区间,比如intervals = [[1,3],[6,9]], newInterval = [2,5]下面就要考虑重叠情况了。原创 2023-06-08 23:54:07 · 435 阅读 · 0 评论 -
leetcode-027-移除元素
如果左指针 left 指向的元素等于 val,此时将右指针 right 指向的元素复制到左指针 left 的位置,然后右指针 right 左移一位。如果赋值过来的元素恰好也等于 val,可以继续把右指针 right 指向的元素的值赋值过来(左指针 left 指向的等于 val 的元素的位置继续被覆盖),直到左指针指向的元素的值不等于 val 为止。如果右指针指向的元素不等于 val,它一定是输出数组的一个元素,我们就将右指针指向的元素复制到左指针位置,然后将左右指针同时右移;解法1(成功,0ms,极快)原创 2023-05-05 23:11:04 · 758 阅读 · 0 评论 -
leetcode-018-四数之和
在确定第一个数之后,如果 nums[i]+nums[n−3]+nums[n−2]+nums[n−1]<target,说明此时剩下的三个数无论取什么值,四数之和一定小于 target,因此第一重循环直接进入下一轮,枚举 \textit{nums}[i+1]nums[i+1];在确定前两个数之后,如果 nums[i]+nums[j]+nums[n−2]+nums[n−1]<target,说明此时剩下的两个数无论取什么值,四数之和一定小于 target,因此第二重循环直接进入下一轮,枚举 nums[j+1]。原创 2023-05-01 12:54:58 · 622 阅读 · 0 评论 -
leetcode-016-最接近的三数之和
同时判断 sum 与 target 的大小关系,因为数组有序,如果 sum > target 则 end--,如果 sum < target 则 start++,如果 sum == target 则说明距离为 0 直接返回结果。根据 sum = nums[i] + nums[start] + nums[end] 的结果,判断 sum 与目标 target 的距离,如果更近则更新结果 ans。在数组 nums 中,进行遍历,每遍历一个值利用其下标i,形成一个固定值 nums[i]原创 2023-04-25 21:28:13 · 95 阅读 · 0 评论 -
约瑟夫环问题
注意:本文参考 https://blog.csdn.net/tingyun_say/article/details/52343897简介首先,我们先来了解一下什么是约瑟夫环问题:讲一个比较有意思的故事:约瑟夫是犹太军队的一个将军,在反抗罗马的起义中,他所率领的军队被击溃,只剩下残余的部队40余人,他们都是宁死不屈的人,所以不愿投降做叛徒。一群人表决说要死,所以用一种策略来先后kill所有人。于是约瑟夫建议:每次由其他两人一起kill一个人,而被kill的人的先后顺序是由抽签决定的,约瑟夫..原创 2021-06-01 22:45:25 · 542 阅读 · 0 评论 -
剑指offer-44-扑克牌的顺子-java
题目及测试package sword044;/*扑克牌的顺子从扑克牌中随机抽出5张牌,判断是不是一个顺子,即这五张牌是不是连续的。2——10为数字本身,A为1,J为11,Q为12,K为13,而大小王为任意数字。*/public class main { public static void main(String[] args) { int[][] testTable = {{1,2,3,2,5},{1,2,3,4,5},{1,2,0,0,4},{1,6,2,7,1}};原创 2021-01-11 21:35:04 · 161 阅读 · 0 评论 -
剑指offer-43-n个骰子的点数-java
题目及测试package sword043;/* 题目:把n个骰子仍在地上,所有骰子朝上一面的点数之和为s,输入n,打印出s的所有可能的值出现的概率。*/import java.util.List;public class main { public static void main(String[] args) { int [] testTable = {0,6,3}; for (int ito : testTable) { test(ito); } }原创 2021-01-11 21:32:05 · 114 阅读 · 0 评论 -
剑指offer-41-和为s的两个数字VS和为s的连续正数序列-java
题目及测试package sword041;/* 题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。假设有多个数字的和等于s,输出随意一对就可以。比如输入数组{1,2,4,7,11,15}和数字15.因为4+11=15。因此输出4和11.题目二:输入一个正数s,打印出全部的和为s的连续正数序列(至少含有两个数字)。比如输入15。因为1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续的序列1——5,4——6。7——8.*/im原创 2021-01-11 21:31:23 · 156 阅读 · 0 评论 -
剑指offer-38-数字在排序数组中出现的次数-java
题目及测试package sword038;/*统计一个数字在排序数组中出现的次数。*/public class main { public static void main(String[] args) { int[][] testTable = {{1,2,2,3},{1,2,3,4}}; for (int[] ito : testTable) { test(ito,2); } } private static void test(int[] ito原创 2020-12-31 20:39:22 · 110 阅读 · 0 评论 -
剑指offer-36-数组中的逆序对-java
题目及测试package sword036;/*题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。 * 输入一个数组,求出这个数组中的逆序对的总数*/public class main { public static void main(String[] args) { int[][] testTable = {{1,1,2},{7,4,6,5},{4,3,2,1},{1,1,1,1}}; for (int[] ito : testTable)原创 2020-12-26 11:06:25 · 116 阅读 · 0 评论 -
剑指offer-33-把数组排成最小的数-java
题目及测试package sword033;/* 输入一个正整数数组,把数组里所有数字拼接起来排成一个数, * 打印能拼接出的所有数字中最小的一个。 * 例如输入数组{3,32,321},则打印出这3个数字能排成的最小数字321323.*/public class main { public static void main(String[] args) { int[][] testTable = {{3,32,321},{3,12,121,5,9}}; for (int[]原创 2020-12-26 10:58:26 · 137 阅读 · 0 评论 -
剑指offer-31-连续子数组的最大和-java
题目及测试原创 2020-12-19 09:40:14 · 98 阅读 · 0 评论 -
剑指offer-20-顺时针打印矩阵-java
题目及测试package sword020;/*题目描述:输入一个矩阵,按照从外向里以顺时针的顺组依次打印出每一个数字。*/import java.util.List;public class main { public static void main(String[] args) { //int[][] testTable = {{1, 2, 3, 4},{5, 6, 7, 8},{9,10,11,12}}; int[][] testTable = {{1, 2, 3,原创 2020-11-21 11:57:17 · 110 阅读 · 0 评论 -
剑指offer-14-调整数组顺序使奇数位于偶数的后面-java
题目及测试package sword014;/*问题描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分;*/public class main { public static void main(String[] args) { int[][] testTable = {{0,1,0,3,12},{1,2,3,4},{1,0,1,3,0,4,0,2,0,2},{0,6,2,7,0}}; for (int[]原创 2020-11-13 21:00:37 · 157 阅读 · 0 评论 -
leetcode-581-最短无序连续子数组-java
题目及测试package pid581;/*581. 最短无序连续子数组给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。示例 1:输入: [2, 6, 4, 8, 10, 9, 15]输出: 5解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。说明 : 输入的数组长度范围在 [1, 10,000]。 输入的数组可能原创 2020-10-10 10:58:21 · 218 阅读 · 0 评论 -
leetcode-560-和为K的子数组-java
题目及测试package pid560;/*560. 和为K的子数组给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 : 数组的长度为 [1, 20,000]。 数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。*/public class main原创 2020-09-30 10:06:57 · 240 阅读 · 0 评论 -
leetcode-448-找到所有数组中消失的数字-java
题目及测试package pid448;/*448. 找到所有数组中消失的数字给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入:[4,3,2,7,8,2,3,1]输出:[5,6]*/import java.原创 2020-09-01 11:40:26 · 211 阅读 · 0 评论 -
leetcode-438-找到字符串中所有字母异位词-java
题目及测试package pid438;/*438. 找到字符串中所有字母异位词给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。说明: 字母异位词指字母相同,但排列不同的字符串。 不考虑答案输出的顺序。示例 1:输入:s: "cbaebabacd" p: "abc"输出:[0, 6]解释:起始索引等于 0 的子原创 2020-08-31 14:55:13 · 208 阅读 · 0 评论 -
leetcode-31-下一个排列-java
题目及测试package pid031;/*31. 下一个排列实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,3 123 132 213 231 312 3211,1,5 → 1,5,11234 1243 1324 1342原创 2020-07-22 14:17:29 · 216 阅读 · 0 评论 -
leetcode-84-柱状图中最大的矩形-java
题目及测试package pid084;/*柱状图中最大的矩形给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。https://leetcode-cn.com/problems/largest-rectangle-in-histogram/以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。 图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。原创 2020-07-15 15:57:03 · 285 阅读 · 0 评论 -
leetcode-218-天际线问题-java
题目及测试package pid218;/*天际线问题城市的天际线是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。现在,假设您获得了城市风光照片(图A)上显示的所有建筑物的位置和高度,请编写一个程序以输出由这些建筑物形成的天际线(图B)。Buildings Skyline Contourhttps://leetcode-cn.com/problems/the-skyline-problem/每个建筑物的几何信息用三元组 [Li,Ri,Hi] 表示,其中 Li 和 Ri 分别是第原创 2020-07-14 16:00:29 · 745 阅读 · 0 评论 -
leetcode-42-接雨水-java
题目及测试package pid042;/*接雨水给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。示例:https://leetcode-cn.com/problems/trapping-rain-water/输入: [0,1,0,2,1,0,1,3,2,1,2,1原创 2020-07-09 15:35:36 · 237 阅读 · 0 评论 -
leetcode-295-数据流的中位数-java
题目及测试package pid295;/* 数据流的中位数中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构: void addNum(int num) - 从数据流中添加一个整数到数据结构中。 double findMedian() - 返回目前所有元素的中位数。示例:addNum(1)addNu原创 2020-07-02 15:04:20 · 197 阅读 · 0 评论 -
leetcode-315-计算右侧小于当前元素的个数-java
题目及测试package pid315;/*计算右侧小于当前元素的个数给定一个整数数组 nums,按要求返回一个新数组 counts。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。示例:输入: [5,2,6,1]输出: [2,1,1,0] 解释:5 的右侧有 2 个更小的元素 (2 和 1).2 的...原创 2019-12-19 15:01:55 · 623 阅读 · 0 评论 -
leetcode-76-最小覆盖子串-java
题目及测试package pid076;/*最小覆盖子串给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。示例:输入: S = "ADOBECODEBANC", T = "ABC"输出: "BANC"说明: 如果 S 中不存这样的子串,则返回空字符串 ""。 如果 S 中存在这样的子串,我们保证它是唯一的答案。...原创 2019-12-02 14:03:39 · 240 阅读 · 0 评论 -
leetcode-239-滑动窗口最大值-java
题目及测试package pid239;/*滑动窗口最大值给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。 示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: ...原创 2019-11-29 16:58:00 · 396 阅读 · 0 评论 -
leetcode-287-寻找重复数-java
题目及测试package pid287;/*寻找重复数给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入: [1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3说明: 不能更改原数组(假设数...原创 2019-11-25 13:36:42 · 327 阅读 · 0 评论 -
leetcode-041-缺失的第一个正数-java
题目及测试package pid041;/* 第一个缺失的正数给定一个未排序的整数数组,找出其中没有出现的最小的正整数。示例 1:输入: [1,2,0]输出: 3示例 2:输入: [3,4,-1,1]输出: 2示例 3:输入: [7,8,9,11,12]输出: 1说明:你的算法的时间复杂度应为O(n),并且只能使用常数级别的空间。}*/pub...原创 2019-11-21 11:48:57 · 187 阅读 · 0 评论 -
leetcode-289-生命游戏-java
题目及测试package pid289;/*生命游戏根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞具有一个初始状态 live(1)即为活细胞, 或 dead(0)即为死细胞。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律: ...原创 2019-11-20 13:29:24 · 170 阅读 · 0 评论 -
leetcode-011-盛最多水的容器-java
题目及测试package pid011;/* 盛最多水的容器给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。示例:输入: [1,...原创 2019-11-19 13:39:28 · 135 阅读 · 0 评论 -
leetcode-454-四数相加 II-java
题目及测试package pid454;/*四数相加 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 之间,最终...原创 2019-11-18 14:43:52 · 218 阅读 · 0 评论 -
leetcode-54-螺旋矩阵-java
题目及测试package pid054;/*螺旋矩阵给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例 1:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例 2:输入:[ [1, 2, 3, 4], [5...原创 2019-11-15 10:20:28 · 244 阅读 · 0 评论 -
leetcode-238- 除自身以外数组的乘积(Product of Array Except Self)-java
题目及测试/*Product of Array Except Self给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。...原创 2019-11-14 13:44:17 · 160 阅读 · 0 评论 -
leetcode-66-加一(PLUS one)-java
题目及测试package pid66;/*加一给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出...原创 2018-08-05 11:44:08 · 308 阅读 · 0 评论 -
leetcode-48-旋转图像(rotate image)-java
题目及测试用例package pid048;/*旋转图像给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix = [ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为...原创 2018-08-09 16:10:56 · 340 阅读 · 0 评论 -
leetcode-350-两个数组的交集 II( Intersections of two arrays II)-java
题目及测试用例package pid350;/*两个数组的交集 II给定两个数组,写一个方法来计算它们的交集。例如:给定 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].注意: 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。 我们可以不考虑输出结果的顺序。跟进: ...原创 2018-08-04 22:53:58 · 489 阅读 · 0 评论 -
leetcode-136-只出现一次的数字(single number)-java
题目及测试函数package pid136;/*给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4*/public class ma...原创 2018-08-03 16:31:54 · 260 阅读 · 0 评论 -
leetcode-189-旋转数组( Rotate Array)-java
题目及测试用例package pid189;/*旋转数组给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,...原创 2018-07-29 17:16:30 · 1222 阅读 · 0 评论 -
leetcode-122-买卖股票的最佳时机 II-java
题目及测试用例package pid122;//买卖股票的最佳时机 II////给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。////设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。////注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。////示例 1:////输入: [7,1,5,3,6,...原创 2018-07-25 13:24:09 · 1563 阅读 · 0 评论