数组
数组的相关题目
ZQQ~BK
这个作者很懒,什么都没留下…
展开
-
机器人的运动范围
题目描述:地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?public class Solution { int count=0; public void func(int[][] flag,in原创 2020-06-06 19:44:14 · 152 阅读 · 0 评论 -
最短无序连续子数组
题目:给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。方法一:基于选择排序:遍历数组中的每一个元素。对于每一个元素,我们尝试找到它在正确顺序数组中的位置,如果存在 nums[j] 比 nums[i] 小,这意味着 nums[i]和 nums[j] 都不在排序后数组中的正确位置。因此我们需要需...原创 2020-01-20 21:39:32 · 129 阅读 · 0 评论 -
寻找第K大
题目描述:有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。思路分析:这题是用快排的思想:例如找49个元素里面第24大的元素,那么按如下步骤: 1.进行一次快排(将大的元素放在前半段,小的元素放在后半段),假设得到的中轴为par 2.判断 par - begin + 1 == k...原创 2020-04-01 15:18:54 · 132 阅读 · 0 评论 -
最长上升子序列
题目描述:给定一个无序的整数数组,找到其中最长上升子序列的长度。思路分析:动态规划,我们定义一个数组dp,dp[i]用来存储i之前最长上升序列的长度class Solution { public int lengthOfLIS(int[] nums) { int len=nums.length; if(len==0){ ret...原创 2020-03-14 12:34:26 · 82 阅读 · 0 评论 -
多数元素
class Solution { public int majorityElement(int[] nums) { Arrays.sort(nums); return nums[nums.length/2]; }}class Solution { public int majorityElement(int[] nums) { ...原创 2020-03-14 12:28:35 · 159 阅读 · 0 评论 -
II. 和为s的连续正数序列
题目描述:输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。思路分析:设滑动窗口的左边界为 i,右边界为 j,则滑动窗口框起来的是一个左闭右开区间 [i,j)。注意,为了编程的方便,滑动窗口一般表示成一个左闭右开区间。在一开始,i=1,j=1,滑动窗口位于序列的最左侧,窗口大小为零...原创 2020-03-06 16:02:06 · 116 阅读 · 0 评论 -
腐烂的橘子
题目描述:在给定的网格中,每个单元格可以有以下三个值之一:值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回 -1。思路分析:每分钟每个腐烂的橘子都会使其上下左右的新鲜橘子腐烂。队列中只让腐烂的橘子入队;每次记录队列的长...原创 2020-03-04 15:17:32 · 121 阅读 · 1 评论 -
四数之和
题目描述:给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。思路分析:判断数组为null或长度小于4,直接返回对数组进行从小到大排序定义4个指针i,j,left,right,...原创 2020-02-29 21:08:46 · 136 阅读 · 0 评论 -
三数之和
题目描述:给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。思路分析:首先对数组进行排序,排序后固定一个数 nums[i]再使用左右指针指向 nums[i]后面的两端,数字分别为 nums[left] 和 nums[right],计算三个数...原创 2020-02-24 23:40:52 · 80 阅读 · 0 评论 -
统计有序矩阵中的负数
题目:给你一个 m * n 的矩阵 grid,矩阵中的元素无论是按行还是按列,都以非递增顺序排列。请你统计并返回 grid 中 负数 的数目。思路分析:从最从右上角开始,如果是负数,则这个数的这一列下面都是负数,直接全部加上行数即可,然后从右往左遍历class Solution { public int countNegatives(int[][] grid) { ...原创 2020-02-16 17:26:10 · 506 阅读 · 0 评论 -
高度检查器
题目:学校在拍年度纪念照时,一般要求学生按照 非递减 的高度顺序排列。请你返回能让所有学生以 非递减 高度排列的最小必要移动人数。提示:1 <= heights.length <= 1001 <= heights[i] <= 100方法一:最容易想到的方法,将数组排序后比较两个数组不相同的个数即可class Solution { public int...原创 2020-02-13 13:31:53 · 106 阅读 · 0 评论 -
翻转图像
题目描述:给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果。水平翻转图片就是将图片的每一行都进行翻转,即逆序。例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]。反转图片的意思是图片中的 0 全部被 1 替换, 1 全部被 0 替换。例如,反转 [0, 1, 1] 的结果是 [1, 0, 0]。方法一:利用双指针遍历二维数组每一行,start从头遍历,en...原创 2020-02-08 19:44:22 · 229 阅读 · 0 评论 -
奇数值单元格的数目
题目:给你一个 n 行 m 列的矩阵,最开始的时候,每个单元格中的值都是 0。另有一个索引数组 indices,indices[i] = [ri, ci] 中的 ri 和 ci 分别表示指定的行和列(从 0 开始编号)。你需要将每对 [ri, ci] 指定的行和列上的所有单元格的值加 1。请你在执行完所有 indices 指定的增量操作后,返回矩阵中 「奇数值单元格」 的数目。思路分析:...原创 2020-02-07 14:08:32 · 182 阅读 · 0 评论 -
供暖器
题目描述:冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。现在,给出位于一条水平线上的房屋和供暖器的位置,找到可以覆盖所有房屋的最小加热半径。所以,你的输入将会是房屋和供暖器的位置。你将输出供暖器的最小加热半径。思路分析:(1)先找到每个房屋离加热器的最短距离(即找出离房屋最近的加热器)存储在一个数组中;(2)在所有距离中选出最大的一个即为最小覆盖半径。即为将数...原创 2020-01-27 19:30:50 · 183 阅读 · 0 评论 -
非递减数列
题目描述:给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i < n),满足 array[i] <= array[i + 1]。方法一:一,当数组长度小于3时,最多需要调整一次就能满足条件二,当数组长度大于等于3时,出现第i+1个元素大于第i个...原创 2020-01-27 14:24:18 · 185 阅读 · 0 评论 -
子集
题目:给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。方法一:n个元素的集合的子集为2^n个,因此可以用二进制来表示每一个子集,二进制位为1则选取对应位上的元素。class Solution { public List<List<Integer>> subsets(int[] nums) { List<Lis...原创 2020-01-20 22:30:53 · 138 阅读 · 0 评论 -
两数之和
题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。方法一:暴力法:两层for循环class Solution { public int[] twoSum(int[] nums, int target) { i...原创 2020-01-19 21:27:14 · 87 阅读 · 0 评论 -
第三大的数
题目:给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。方法一:维护一个只有3个元素的TreeSet,如果大于三个元素就就把Set中的最小最小值remove掉。最后如果Set中元素小于3就返回Set最大值,否则返回最小值。class Solution { public int thirdMax(int[] nums)...原创 2020-01-19 20:49:59 · 168 阅读 · 0 评论 -
加一
题目:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。方法一:有以下几种情况:给定整数中最后一位不是数字9。给定整数中最后一位是数字9,但不全是数字9。给定整数所有位全是数字99(如9999)。算法思路:对于上述情况1,直接在最后一位加1即可。...原创 2020-01-19 20:15:16 · 132 阅读 · 0 评论 -
将数组分成和相等的三个部分
题目描述:给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false。形式上,如果可以找出索引 i+1 < j 且满足 (A[0] + A[1] + … + A[i] == A[i+1] + A[i+2] + … + A[j-1] == A[j] + A[j-1] + … + A[A.length - 1]) 就可以将数组三等分。方法一:数...原创 2020-03-11 23:03:16 · 319 阅读 · 0 评论 -
在排序数组中查找元素的第一个和最后一个位置
题目:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。思路:利用二分查找法,依次找出target第一次出现的位置和最后一次出现的位置class Solution { public int[] searchRange(...原创 2020-01-20 14:49:31 · 215 阅读 · 0 评论 -
寻找数组的中心索引
题目:给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法。我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。方法:sum 是数组的和,当索引 i 是中心索引时,位于 i 左边数组元素的和 lsum 满足 sum - n...原创 2020-01-19 16:13:43 · 208 阅读 · 1 评论 -
按奇偶排序数组
题目:给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。你可以返回满足此条件的任何数组作为答案。方法一:两遍遍历数组,第一遍将所有偶数找出,第二遍找出所有奇数class Solution { public int[] sortArrayByParity(int[] A) { int[] ans = new int[A.l...原创 2020-01-19 15:14:45 · 117 阅读 · 0 评论 -
寻找两个有序数组的中位数
题目:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。方法一:1.中位数:偶数个中间两个和除以2,奇数个中位数为中间那个2.先判断是否其中有一个数组为空,如果有直接返回中位数即可3.将两个数组中的值重新排序到新的数组,返回新...原创 2020-02-20 20:33:13 · 364 阅读 · 0 评论 -
有序数组的平方
题目:给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。方法一: 将数组中每个元素的平方求出放入数组,然后排序,这是最简单的做法class Solution { public int[] sortedSquares(int[] A) { for(int i=0;i<A.length;i++){ ...原创 2020-01-19 14:07:32 · 175 阅读 · 0 评论 -
存在重复元素
题目:给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。方法一:如果存在重复元素,排序后它们应该相邻,因此将数组排序后查找重复相邻元素class Solution { public boolean containsDuplicate(int[] nums) { Arrays....原创 2020-01-18 21:39:18 · 104 阅读 · 0 评论 -
合并两个有序数组
题目:给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。方法一:将两个数组合并之后再排序。class Solution { pub...原创 2020-01-18 20:29:32 · 157 阅读 · 0 评论 -
搜索插入位置
题目:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。方法一:简单for循环,时间复杂度为O(n)。class Solution { public int searchInsert(int[] nums, int target) { int len=nums.len...原创 2020-01-18 12:44:53 · 121 阅读 · 0 评论 -
移除元素
题目:给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。方法一:遍历数组nums,同时设置一个下标flag;在遍历过程中如果出现数字与需要移除的值不相同时,则进行拷贝覆盖nums[...原创 2020-01-17 23:18:33 · 69 阅读 · 0 评论 -
旋转数组
题目:给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。方法一:使用两层for循环class Solution { public void rotate(int[] nums, int k) { int len=nums.length; for(int i=0;i<k;i++){ int tmp=nu...原创 2020-01-17 22:53:12 · 82 阅读 · 0 评论