![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数组相关
文章平均质量分 70
有关数组的编程题
Forward♞
这个作者很懒,什么都没留下…
展开
-
分治法——找众数
要利用分治法找众数,首先就先要使数组有序。这里,我们用C语言库中的。语句没有执行,那就说明。就是最大的,那就需要和。注:本题已通过牛客网。原创 2023-11-05 20:56:38 · 1183 阅读 · 0 评论 -
每日一题——寻找右区间(排序 + 二分查找)
最简单的思想,就是利用两层循环来求得答案。第一层循环用来遍历每个区间数组。同时,题目告诉我们对于每一个区间数组。题目要我们找的,就是对于每一个区间数组。,但显然,这个方法的时间复杂度为O(N。,第二层循环用来找到每一个。,以此来优化我们的查找。),效率低,故不做讨论。原创 2023-09-28 21:56:08 · 181 阅读 · 0 评论 -
每日一题——下一个排列
当交换完成后,「较大数」右边的数需要按照升序重新排列。这样可以在保证新排列大于原来排列的情况下,使变大的幅度尽可能小。交换,以能够让当前排列变大,从而得到下一个排列。我们需要将一个左边的。原创 2023-09-01 18:32:09 · 256 阅读 · 2 评论 -
每日一题——旋转图像
就被覆盖了,因此我们需要创建一个临时变量来保存数据。,然后再将新数组的数据覆盖到原数组就可以了。因此,当n为奇数或者偶数时,区域的。,这样,这个旋转过程就变为了。原创 2023-08-30 20:30:32 · 304 阅读 · 0 评论 -
每日一题——移动零
同样大小的空间,将遍历数组,将非零元素从头放置,将零从后往前放置,这样就可以将所有的零放到后面,同时保证非零元素的相对顺序。如果可以开辟额外的空间,那这题十分好做。但是这一题要求我们不能额外开辟空间,即要求我们的。,那我们就要思考用双指针的方法了。原创 2023-08-16 14:48:54 · 62 阅读 · 0 评论 -
每日一题——圆圈中最后剩下的数字(约瑟夫环问题)
因此我们应该将。原创 2023-08-14 19:41:16 · 240 阅读 · 0 评论 -
每日一题——旋转数组的最小数字(II)
注:此题是昨天的拓展延伸,昨天题目数组的条件是不会存在重复元素,而本题数组的元素可以重复,因此建议先做前面一题,进行思考,这样求解这一题的过程就会容易理解许多。原创 2023-08-13 21:42:16 · 267 阅读 · 1 评论 -
每日一题——寻找旋转排序数组中的最小值(I)
情况一:旋转过后数组变成。举个例子,经过旋转后它。而这两种情况都有一个。以数组**最右边的值。原创 2023-08-12 22:15:51 · 262 阅读 · 0 评论 -
每日一题——删除有序数组中的重复项
注:本题所采用的方法是建立在的基础之上的,如果大家对双指针的方法不大了解,或者不会做《移除元素》这一题,建议先去看看👉。原创 2023-07-29 15:00:00 · 263 阅读 · 0 评论 -
每日一题——找到消失的数字
如果可以使用额外空间,那这题就好办了。我们直接创建一个相同大小的数组,数组的每个位置代表。的每个元素,然后遍历数组计数就行。原创 2023-07-29 09:48:22 · 264 阅读 · 0 评论 -
每日一题——除自身以外数组的乘积
以下我们以先在。原创 2023-07-27 17:26:26 · 308 阅读 · 0 评论 -
每日一题——多数元素
就这样各路军阀一直以这种以一敌一同归于尽的方式厮杀下去,直到少数阵营都死光,那么最后剩下的几个必然属于多数阵营。(多数阵营 51个,少数阵营只有49个,死剩下的2个就是多数阵营的人)假设有100个士兵,由于多数元素必然大于n/2,那我们假设多数元素士兵为51个,其他元素士兵为49个,这100个士兵一起去占领一块高地(来实现,时间复杂度为O(NlongN),效率有所提高,但仍无法满足题目要求。这样,只需要遍历一遍数组,就可以得到想要的结果,时间复杂度为O(N)这一题也一样,数组的第一个元素就是第一个士兵,,原创 2023-07-26 23:00:39 · 164 阅读 · 0 评论 -
每日一题——搜索插入位置(二分查找)
如果目标值存在,那好办,就是普通的二分查找。但题目还要求,如果目标值不存在于数组,那么还要返回它将被按顺序插入的位置。那么怎么找到要插入的位置呢?首先我们需要明确,若已知数组中不存在目标元素target,那么进行最后一次while循环时,left必定等于right(如下图)看到这是一个无重复元素的升序排列数组,且题目规定时间复杂度为O(logn),那么我们可以很容易的想到这题要用二分查找算法。通过图形的分析,我们确实可以确定若·targett不存在,那么left就是要插入的下标位置。原创 2023-04-20 22:24:04 · 147 阅读 · 0 评论 -
每日一题—— 在排序数组中查找元素的第一个和最后一个位置
我们知道二分查找中,当nums[mid]<target时,left就等于mid+1,mid自然也就右移了,这样不就实现了向右检索吗?而我们知道·,如果一个数再一个有序数组中重复出现,那么如果使用二分查找,查找到的元素下标是不确定的(可能是第一个,可能是中间的,可能是最后一个)假设我们要找开始位置left:同样,开始位置应该在mid或mid左边的位置,所以当nums[mid] >= target时,right就等于mid-1,这样也就实现了mid的左移。原创 2023-04-21 20:59:38 · 67 阅读 · 0 评论 -
每日一题——移除元素
ps:快慢指针的动态图来自《代码随想录》——https://programmercarl.com/原创 2023-04-22 23:39:00 · 68 阅读 · 1 评论 -
每日一题——有序数组的平方
但由于原数组是一个非递减数组,新数组的最大值一定是原数组第一个数(最小值)的平方或最后一个数(最大值)的平方。我们知道,因为有负数的存在,使得可能存在负数的平方大于正数的平方这种情况。因此这题我们就可以采用双指针中对撞指针的思想来解决这题。这样时间复杂度就变为了O(n)原创 2023-04-23 17:25:09 · 73 阅读 · 1 评论 -
每日一题——长度最小的子数组
外层for循环的i确定子数组的起始位置,内层循环的j确定子数组的终点位置。不断扩大子数组的长度(即j不断右移),直到子数组的和大于等于target。看到这题,我们最容易想到的就是利用两层for循环求解。不难得出这种暴力解法的时间复杂度为O(n。),这种解法在leetcode上不能通过。将起始位置右移,直到遍历完整个数组。原创 2023-04-25 23:54:46 · 82 阅读 · 1 评论 -
每日一题——螺旋矩阵
因此我们就要。原创 2023-04-26 22:54:42 · 132 阅读 · 0 评论 -
每日一题——两数之和(返回下标和返回数值两种情况)
第一层for循环用来遍历整个数组,第二层for循环用来判断遍历的两个数的和是否等于target。),如果采用哈希表,可以将时间复杂度降到O(n),但由于笔者还未对哈希表展开学习,故不做讨论。当然我们同样可以上面的暴力解法来解决问题,但有没有效率更高的方法呢?,因此,我们最开始就要用排序算法来使数组nuns有序。注:本题只采用暴力解法,时间复杂度为O(n。我们直接用两层for循环来解决问题。我们可以采用双指针的方法。原创 2023-05-23 22:59:16 · 489 阅读 · 1 评论 -
每日一题——三数之和(双指针)
当我们执行left++,right- -操作的时候,如果nums[left] == nums[++left],或nums[right] == nums[- -right],那么显然也会出现重复的情况,因此。假设给定的数组为{-1,-1,2},如果我们用if(nums[i] == nums[i + 1])进行判断 ,那么第一个-1就会被跳过,这个三元组就不会被计入到结果集中,显然这是不合理的。那么我们是要判断nums[i] == nums[i + 1]还是判断nums[i] == nums[i - 1]呢?原创 2023-05-24 13:31:31 · 1200 阅读 · 2 评论 -
每日一题——四数之和(双指针解法)
*原创 2023-05-25 21:26:06 · 636 阅读 · 1 评论