2022跟着leedcode学数据结构--第一天

62 阅读1分钟

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战

image.png

难度 简单

题目:

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。  

示例 1:

输入:nums = [1,2,3,1] 输出:true 示例 2:

输入:nums = [1,2,3,4] 输出:false 示例 3:

输入:nums = [1,1,1,3,3,4,3,2,4,2] 输出:true  

提示:

1 <= nums.length <= 105 -109 <= nums[i] <= 109

题解:

第一想法: python 中可以使用list(set(data)) 进行去重,获取数据,判断去重后列表长度和源数据长度是否相同即可判断是否数据包含重复项:

解题代码:(简简单单几行代码即可判断出结果)

class Solution:
    def containsDuplicate(self, nums: List[int]) -> bool:
        if len(list(set(nums))) == len(nums):
            return False
        else:
            return True

结果:

image.png

实现比较简单,但是效率确实不太高

题2

[最大子数组和]

难度:简单

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组 是数组中的一个连续部分。

 

示例 1:

输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。 示例 2:

输入:nums = [1] 输出:1 示例 3:

输入:nums = [5,4,-1,7,8] 输出:23  

提示:

1 <= nums.length <= 105 -104 <= nums[i] <= 104  

进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的 分治法 求解。

第一想法:动态规划:

先判断特殊情况,我发现判断特殊情况可以减少一些时间 然后就是常规处理:遍历循环判断前一个数是否大于0,大于0则进行前n个数据加法,小于0则跳过

最后获取最大的数值就是我们要得到的数据了

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        if len(nums)==1:
            return nums[0]
        count = len(nums)
        for row in range(1,count):
            if nums[row-1]>0:
                nums[row]=nums[row-1]+nums[row]
        return max(nums)

执行结果:

image.png

效率还是蛮高的92%啊,进阶今天先不做练习了,有点晚了,有时间再看看如何做进阶的方法吧