数据结构-数组
文章平均质量分 53
甄小胖
这个作者很懒,什么都没留下…
展开
-
D1-AcWing-785-788复习&&789-790
已经忘了几天没刷了,所以从重新开始吧!这几天论文写的,日子过得,浑浑噩噩,要加油啊!!一、785快排复习几天不看,完全忘了。def quick_sort(q,l,r): if l>=r: return i = l-1 j = r+1 x = q[l+r>>1] while(i<j): i += 1 while q[i]<x: i += 1原创 2022-03-07 20:59:51 · 107 阅读 · 0 评论 -
Leetcode-D49-数组-78. 子集&79. 单词搜索
一、复习-75、 颜色分类1、需要注意一下while中的条件应该是i<size。虽然size是会改变的,但是他代表的是后链中已经被处理过的位置。class Solution: def sortColors(self, nums: List[int]) -> None: """ Do not return anything, modify nums in-place instead. """ zero = 0原创 2022-02-15 08:27:14 · 177 阅读 · 0 评论 -
Leetcode-D48-数组-75. 颜色分类&77. 组合
一、复习74、搜索二维矩阵连成一维矩阵再做处理。没啥问题class Solution: def searchMatrix(self, matrix: List[List[int]], target: int) -> bool: m = len(matrix) n = len(matrix[0]) l=0 r=m*n-1 while l<=r: mid = (l+r)>原创 2022-02-14 09:46:35 · 281 阅读 · 0 评论 -
Leetcode-D47-数组-74. 搜索二维矩阵
这两天又因为一些事情,没有更新,要继续啦~一、复习73、矩阵置零刚开始有个大错误,就是在更新的时候,直接把记录着info的第一行/第一列更新了。这是不对的,相当于把信息抹去了。应该先扫描一遍第一行&第一列,最后统一更新第一行&第一列。之前则不更新,用作更新其他行列的参照。也就是先不更新第一行和第一列,先记录下来。当且仅当第一行和第一列中含有0时,第一列&第一行需要更新为0。其他行列是否更新,则依照在第一行&第一列中记录的值。class Solution: d原创 2022-02-13 09:49:01 · 351 阅读 · 0 评论 -
Leetcode-D46-数组-59. 螺旋矩阵 II&73. 矩阵置零
一、复习56、合并区间先用sort,然后,分三种情况(不相交、相交、重叠)进行讨论和合并。57、 插入区间在56的基础上进行修改就ok了,先加入,再进行56的操作。但我感觉这道题有更简单的做法,因为给的list已经有特征了——不重叠、有序,所以应该会有简单一点的操作。59. 螺旋矩阵 II感觉是前面某个旋转矩阵的改编,甚至更为简单,因为这里面一定是正方形——用原来的方法可以,但也可能有更简单的方法,比如说,固定循环几次(与n有关),每次往上下左右走几个格。但是还是用之前的方法吧,更智能一些(虽原创 2022-02-09 08:00:34 · 98 阅读 · 0 评论 -
Leetcode-D45-数组-56. 合并区间&57. 插入区间
一、复习54、 螺旋矩阵,通过了,写起来难度不大——除了应该和rows、cols比大小,错写成col和row了。我觉得这道题最神奇的地方就是方向移动的表示以及转变了——通过数组记录方向变化+利用%的机制实现循环妙啊!!!class Solution: def spiralOrder(self, matrix: List[List[int]]) -> List[int]: rows = len(matrix) cols = len(matrix[0原创 2022-02-07 08:17:42 · 5913 阅读 · 0 评论 -
Leetcode-D44-数组-48. 旋转图像&54. 螺旋矩阵(明天复习)
一、复习1、47. 全排列 II写的还不错,思路大体上对,就是还是小小的调试了一下——当size=0的时候,是进不去for循环的,所以需要在size=1的时候就判断,然后直接append(path),然后returnclass Solution: def permuteUnique(self, nums: List[int]) -> List[List[int]]: def dsf(size,nums,path,res): for index in原创 2022-02-06 09:00:19 · 185 阅读 · 0 评论 -
Leetcode-D43-数组-40. 组合总和 II&47. 全排列 II
一、复习先复习一下昨天写的回溯问题,从全排列这个简单的开始。46、 全排列其实这种回溯挺好玩的,不同于动态规划,他可以记住answer的细节,并且都在路径上(我们用不断递归path来记录这个值,最后把最终答案append到res中)。class Solution: def permute(self, nums: List[int]) -> List[List[int]]: def dfs(path,res,nums): if len(nums)=原创 2022-02-05 09:30:13 · 440 阅读 · 0 评论 -
Leetcode-D42-数组-39. 组合总和&46. 全排列
一、复习昨天没有写题,今天还是先复习一下t3434、除了不确定while循环内是否加等号外,都很熟练了。【while内不需要加=】class Solution: def searchRange(self, nums: List[int], target: int) -> List[int]: n = len(nums) if n==0: return [-1,-1] if n==1: if n原创 2022-02-04 11:31:22 · 432 阅读 · 0 评论 -
Leetcode-D40-数组-34. 在排序数组中查找元素的第一个和最后一个位置&36. 有效的数独
一、复习33、 搜索旋转排序数组今天的思路顺利多了,就是还有一些小纰漏。刚开始判断的是mid落在哪个区间,是nums[mid]在和端点作比较,而不是target;在后来判断target区间的时候,要严格加上左右边界,不然不严谨。class Solution: def search(self, nums: List[int], target: int) -> int: n = len(nums) l=0 r=n-1 while原创 2022-02-02 11:39:09 · 601 阅读 · 0 评论 -
Leetcode-D39-数组-31、下一个排列&33、 搜索旋转排序数组
一、复习-31、下一个排列我吐,整体思路没问题;但是:(1)快排问题可太大了,又出错了,居然忘记写range了!!!找了半天的错误。(2)里层循环找的是距离要交换的那位数最近的那个数,是记录下下来的index;而不是循环到最后的i,j33、 搜索旋转排序数组愈发凌乱,而且还不会啊啊啊啊啊附上今日份糟糕代码class Solution: def search(self, nums: List[int], target: int) -> int: n = len(n原创 2022-02-01 10:55:31 · 614 阅读 · 0 评论 -
Leetcode-D38-数组-31. 下一个排列&33. 搜索旋转排序数组
一、复习16、 最接近的三数之和其实和双指针的三数之和差不多,就记录一个min_distract就可以了。但需要注意的是这个距离需要取绝对值。18、 四数之和两组双指针就搞定了哈哈二、31. 下一个排列1、看不懂题,问题来了:什么是字典顺序?好像也没有合适的答案。先看看高赞如何解释这道题。2、哦是把数组里的数组成一个数字,从小到大排列。并没有什么思路。3、自己想到了,将后面的大数和前面的小树交换。但没想到的是:(1)将后面尽可能小的大数与前面的数交换(2)交换后,要对后面的几位进行升序原创 2022-01-31 09:55:17 · 470 阅读 · 0 评论 -
Leetcode-D37-数组-16. 最接近的三数之和&18. 四数之和
一、复习11、盛最多水的容器只有短的变化,面积才可能变大,从都到尾遍历所有短的变化的情况。15、三数之和(1)注意三个数如何分配:遍历哪个,哪两个是双指针。(2)删除重复情况二、16. 最接近的三数之和1、这题和三数之和差不多啊,应该是多记录一个min值,而且不用排除重复情况。2、这样写居然超时了class Solution: def threeSumClosest(self, nums: List[int], target: int) -> int: n =原创 2022-01-30 10:13:49 · 2602 阅读 · 0 评论 -
Leetcode-D36-数组-11. 盛最多水的容器&15. 三数之和
复习-455. 分发饼干贪心算法-先用最少的量满足最容易满足的。11. 盛最多水的容器1、只能想出暴力,估计会超时2、原来是双指针问题,只需要O(n)的时间复杂度,实在是太强了啊~3、只有不断更新短板的情况下,面积才会变大。更新长版一定是不变或者变小。所以,遍历所有可能变大的情况,取最大值。class Solution: def maxArea(self, height: List[int]) -> int: n = len(height) p=0原创 2022-01-29 11:16:23 · 2066 阅读 · 0 评论 -
Leetcode-D34-数组-136. 只出现一次的数字&167. 两数之和 II - 输入有序数组
一、复习1、66. 加一分为三种情况进行讨论class Solution:def plusOne(self, digits: List[int]) -> List[int]:n = len(digits)num = 0for i in range(n-1,-1,-1):if digits[i]9:num+=1else:breakif num0:digits[n-1]+=1return digitselif num==n:return [1]+[0]*nelse:d原创 2022-01-27 11:39:06 · 1092 阅读 · 0 评论 -
Leetcode-D33-数组-66. 加一&88. 合并两个有序数组
一、复习移除元素-双指针问题,一个指针用来记录下一个扫描哪个元素;另一个指针用来记录下一个写哪里搜索插入位置-二分法,不断与中间位置的数字比较大小值,缩小区间范围;当两侧只差一个单位时,看val是否与两侧中的一个相等or在两个之间。二、66. 加一1、感觉这道题的主要问题在于进位。2、不知道为啥错class Solution: def plusOne(self, digits: List[int]) -> List[int]: n = len(digits)原创 2022-01-25 17:41:08 · 910 阅读 · 0 评论 -
Leetcode-D32-数组-27. 移除元素&35. 搜索插入位置
一、复习(一)1. 两数之和1、这题主要是在考查哈希表,利用哈希表做映射,牺牲空间,换取时间的速度,最终只需要遍历一次。2、字典是映射结构。(二)26. 删除有序数组中的重复项1、这题主要考虑如何节省空间,利用双指针,一边搜索,一边修改。2、此处python中的指针就是数组的index二、27. 移除元素1、和昨天双指针的那个删除有序数组相似——一个指针用于搜索,一个用于记录。2、不过这里p我设置的含义是下一个该写到哪里(index),但是还没有写,所以实际上只写到了index为p-1的地原创 2022-01-24 10:13:23 · 656 阅读 · 0 评论 -
Leetcode-D31-数组-1. 两数之和&26. 删除有序数组中的重复项
终于不做动态规划,换成数组了,开心!1. 两数之和1、只能想到暴力算法,我丢,看眼答案2、说要用哈希表,但我不太懂什么是哈希表,查了一篇文章,感觉就是分类呀。http://www.woshipm.com/pmd/805326.html3、再去看看答案,投了个稿,要去跳绳了,还没写,明天想想。...原创 2022-01-23 07:57:49 · 74 阅读 · 0 评论