LeetCode 数组
文章平均质量分 64
在具体的编程语言中,数组的实现方式具有一定差别。比如 C++ 和 Java 中,数组中的元素类型必须保持一致,而 Python 中则可以不同。相比之下,Python 中的数组(称为 list)具有更多的高级功能。
以下是数组的相关练习,可以帮助你进一步了解数组,快来试试吧!
稚嫩的劢劢
上海交通大学金融硕士在读,对Python、算法、Linux、量化交易感兴趣
展开
-
LeetCode 剑指 Offer 11. 旋转数组的最小数字(Python、二分查找)
文章目录方法一:找非单调增的点题目描述方法一:找非单调增的点class Solution: def minArray(self, numbers: List[int]) -> int: smallest = numbers[0] for i in numbers: if i < smallest: return i return smallest...原创 2021-01-21 18:58:46 · 294 阅读 · 3 评论 -
LeetCode 剑指 Offer 05. 替换空格(Python)
文章目录方法一:简单遍历题目描述方法一:简单遍历class Solution: def replaceSpace(self, s: str) -> str: res = '' for i in s: if i == ' ': res += '%20' else: res += i return res...原创 2021-01-18 20:11:10 · 115 阅读 · 0 评论 -
LeetCode 剑指 Offer 04. 二维数组中的查找(Python、线性查找)
题目描述文章目录方法一:不断缩小范围方法二:线性查找方法一:不断缩小范围根据数组两个维度上的递增特性,可以总结出这样的算法,如果 matrix[i][j]>target,那么搜索的列范围就可以缩小到 j。class Solution: def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool: if not matrix: return False原创 2021-01-12 19:22:25 · 187 阅读 · 0 评论 -
LeetCode 152. 乘积最大子数组(Python、动态规划)
“最大子数组和”的变型题目描述动态规划思路和算法如果我们用 fmax(i)f_{\max}(i)fmax(i) 来表示以第 iii 个元素结尾的乘积最大子数组的乘积,aaa 表示输入参数 numsnumsnums,那么根据「53. 最大子序和」的经验,我们很容易推导出这样的状态转移方程:fmax(i)=maxi=1n{f(i−1)×ai,ai}f_{\max}(i) = \max_{i = 1}^{n} \{ f(i - 1) \times a_i, a_i \}fmax(i).原创 2020-12-24 20:35:08 · 732 阅读 · 1 评论 -
209. 长度最小的子数组(二分查找、双指针、Python)
学习二分查找和双指针的应用题目描述文章目录方法一:前缀和 + 二分查找方法二:双指针方法一:前缀和 + 二分查找使用二分查找,则可以将时间优化到 O(logn)O(\log n)O(logn)。为了使用二分查找,需要额外创建一个数组 sums\text{sums}sums 用于存储数组 nums\text{nums}nums 的前缀和,其中 sums[i]\text{sums}[i]sums[i] 表示从 nums[0]\text{nums}[0]nums[0] 到 nums[i−1]\te.原创 2020-11-26 12:10:49 · 378 阅读 · 0 评论 -
345. 反转字符串中的元音字母(对撞指针、Python)
题目描述对撞指针class Solution: def reverseVowels(self, s: str) -> str: vowels = ['a', 'e', 'i', 'o', 'u'] left = 0 right = len(s) - 1 str_list = [x for x in s] while left < right: if str_list[left].l原创 2020-11-25 00:16:45 · 123 阅读 · 0 评论 -
125. 验证回文串(对撞指针、Python)
题目描述直接在原字符串 sss 上使用双指针。在移动任意一个指针时,需要不断地向另一指针的方向移动,直到遇到一个字母或数字字符,或者两指针重合为止。也就是说,我们每次将指针移到下一个字母字符或数字字符,再判断这两个指针指向的字符是否相同。...原创 2020-11-24 00:08:17 · 196 阅读 · 0 评论 -
167. 两数之和 II - 输入有序数组(对撞指针、Python)
学习对撞指针的应用题目描述初始时两个指针分别指向第一个元素位置和最后一个元素的位置。每次计算两个指针指向的两个元素之和,并和目标值比较。如果两个元素之和等于目标值,则发现了唯一解。如果两个元素之和小于目标值,则将左侧指针右移一位。如果两个元素之和大于目标值,则将右侧指针左移一位。移动指针之后,重复上述操作,直到找到答案。使用双指针的实质是缩小查找范围。那么会不会把可能的解过滤掉?答案是不会。假设 numbers[i]+numbers[j]=target\text{numbers}[i]+\text.原创 2020-11-22 11:16:20 · 128 阅读 · 0 评论 -
88. 合并两个有序数组(三指针、Python)
学习三指针的应用题目描述文章目录方法一:快速排序得分方法二:三指针(最优)方法一:快速排序得分class Solution: def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None: """ Do not return anything, modify nums1 in-place instead. """ j = 0..原创 2020-11-22 11:01:52 · 145 阅读 · 0 评论 -
215. 数组中的第K个最大元素(快速排序、堆排序、Python)
学习快速排序和选择的应用题目描述文章目录方法一:快速排序方法二:基于快速排序的选择方法方法一:快速排序class Solution: def findKthLargest(self, nums: List[int], k: int) -> int: self.quickSort(nums, 0, len(nums)-1) return nums[-k] def quickSort(self, nums, left, right): .原创 2020-11-21 00:35:18 · 596 阅读 · 0 评论 -
75. 颜色分类(三指针、Python)
学习三指针的思想及应用题目描述文章目录方法一:双指针(两遍循环)方法二:三指针(一遍循环)方法三:三指针(交换0和2)方法一:双指针(两遍循环)我们可以考虑对数组进行两次遍历。在第一次遍历中,我们将数组中所有的 000 交换到数组的头部。在第二次遍历中,我们将数组中所有的 111 交换到头部的 000 之后。此时,所有的 222 都出现在数组的尾部,这样我们就完成了排序。具体地,我们使用一个指针 jjj 表示「头部」的范围,jjj 中存储了一个整数,表示数组 nums\textit{nums}.原创 2020-11-19 20:15:18 · 282 阅读 · 0 评论 -
80. 删除排序数组中的重复项 II
学习双指针的应用题目描述算法我们使用了两个指针,iii 是遍历指针,指向当前遍历的元素;jjj 指向下一个要覆盖元素的位置。同样,我们用 countcountcount 记录当前数字出现的次数。countcountcount 的最小计数始终为 1。 我们从索引 1 开始一次处理一个数组元素。若iii指向的元素与jjj指向的元素相同,即 nums[i]==nums[j],则 count+1count+1count+1。若 count>2count > 2count>2,则说.原创 2020-11-19 17:07:34 · 155 阅读 · 0 评论 -
26. 删除排序数组中的重复项(双指针、Python)
学习双指针法的应用及其优化题目描述双指针数组完成排序后,我们可以放置两个指针 iii 和 jjj,其中 iii 是慢指针,而 jjj 是快指针。只要 nums[i]=nums[j]nums[i] = nums[j]nums[i]=nums[j],我们就增加 jjj 以跳过重复项。当我们遇到 nums[j]≠nums[i]nums[j] \neq nums[i]nums[j]=nums[i] 时,跳过重复项的运行已经结束,因此我们必须把它(nums[j]nums[j]nums[j])的值复制到.原创 2020-11-18 16:49:14 · 132 阅读 · 0 评论 -
27. 移除元素
学习双指针法的应用及其优化题目描述类似题目283.移动零文章目录方法一:双指针思路算法方法二:双指针 —— 当要删除的元素很少时思路算法方法一:双指针思路既然问题要求我们就地删除给定值的所有元素,我们就必须用 O(1)O(1)O(1) 的额外空间来处理它。如何解决?我们可以保留两个指针 iii 和 jjj,其中 iii 是慢指针,jjj 是快指针。(代码里相反,iii为快指针,jjj为慢指针)算法当 nums[j]nums[j]nums[j] 与给定的值相等时,递增 jjj 以跳过.原创 2020-11-18 16:18:17 · 106 阅读 · 0 评论 -
283. 移动零
学习双指针法的运用与优化题目描述文章目录方法一:双指针方法二:操作局部优化(双指针)方法三:最优解方法一:双指针建立两个头尾指针,分以下几种情况:若左指针指向的数为零,将两指针中间的数值向左移动一位,并将左指针指向的这个零移至右指针的位置,同时右指针向左移动一位若左指针指向的数非零,将左指针向右移动一位若右指针值向的数为零,向左移动一位class Solution: def moveZeroes(self, nums: List[int]) -> None: .原创 2020-11-18 15:32:16 · 123 阅读 · 0 评论