力扣-数据结构入门:https://leetcode.cn/study-plan/data-structures/ 在计算机科学中,数据结构是计算机中存储、组织数据的方式。 正确的数据结构选择可以提高算法的效率。在计算机程序设计
力扣-数据结构入门:https://leetcode.cn/study-plan/data-structures/
在计算机科学中,数据结构是计算机中存储、组织数据的方式。
正确的数据结构选择可以提高算法的效率。在计算机程序设计的过程中,选择适当的数据结构是一项重要工作。许多大型系统的编写经验显示,程序设计的困难程度与最终成果的质量与表现,取决于是否选择了最适合的数据结构。 一共14天,主要是简单题。
第一天(2022年9月18日)
217. 存在重复元素
给定数组,判断是否存在重复元素。 做法:
直接遍历会超时。 2的时间复杂度是O(nlogn) 也就是排序的时间复杂度 3的时间复杂度是O(n),但需要额外的O(n)辅助空间。 (穷举法基本都能想到,但很容易超时,后面只有在穷举法能通过时才列出来。)
3比较简单,这里写一下3的做法:
return len(nums) != len(set(nums))53. 最大子数组和
给定数组,求其中一个连续数组和的最大值。
比较容易想到的是用一个数组记录目前位置最大的值(动态规划)。
用 dp[i] 表示以i位置结尾的连续数组和的最大值。 最后返回dp数组中最大值。
class Solution: def maxSubArray(self, nums: List[int]) -> int: length = len(nums) dp = [0 for i in range(length)] for i in range(length): dp[i] = max(dp[i - 1], 0) + nums[i] return max(dp)题解给出了一种省略dp数组的方法:
class Solution: def maxSubArray(self, nums: List[int]) -> int: pre = 0 res = nums[0] for x in nums: pre = max(pre+x ,x) res = max(res, pre) return res