美文网首页
2021-07-12leetcode刷题

2021-07-12leetcode刷题

作者: Cipolee | 来源:发表于2021-07-13 22:48 被阅读0次
切片切记:后面是0,这样什么都切不到,想要切到末尾,什么都不加

所以使用len(nums)-k,而不是-k

    def rotate(self, nums: List[int], k: int) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        k=k%len(nums)
        nums[:]=nums[len(nums)-k:]+nums[:len(nums)-k]
#防止k是0
        #原地修改使用切片重新赋值
        #防止k做完
        #return

三数之和
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。

不重复,先使用排序,然后三个数中的第一个数选择后(一定是操作完之后),再选择一个新数。

def threeSum(self, nums: List[int]) -> List[List[int]]:
    nums=sorted(nums)
    ans,r=[],[]
    length_nums=len(nums)
    for i in range(length_nums-2):
        if i>=1 and nums[i]==nums[i-1]:
            continue
        item,per=nums[i],[nums[i]]
        left,right=i+1,length_nums-1
        while(left<right):
            while(left<right and left>i+1 and nums[left]==nums[left-1]):
                #print(nums[left])
                left+=1
            while(left<right and right<length_nums-1 and nums[right]==nums[right+1]):
                right-=1
            if left==right:
                break
            ''' '''
            if nums[left]+nums[right]+item<0:
                left+=1
            elif nums[left]+nums[right]+item>0:
                right-=1
            else:
                #print(left,right)
                ans.append([item,nums[left],nums[right]])
                left+=1
                #right-=1也可
    return ans

移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

标解:条件嵌套与双指针经常一起使用。

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        n = len(nums)
        left = right = 0
        while right < n:
            if nums[right] != 0:
                nums[left], nums[right] = nums[right], nums[left]
                left += 1
            right += 1

我的解

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        if len(nums)<=1:
            return
        #类似于快速排序算法,,错误思路
        #走到0后面没有0算结束
        left,flag=0,False
        while( not flag):
            if left==len(nums):
                flag=True
            idx=left
            while(idx<len(nums) and nums[idx]==0):
                idx+=1
            if idx==len(nums):
                break
                #flag=True
            if idx==left:
                left+=1
                #if left==4:
                    #ptint("here")
            else:
                #print(nums[:left],nums[idx:],nums[left:idx])
                nums[:]=nums[:left]+nums[idx:]+nums[left:idx]

在空间上和时间上都有浪费,在整个列表复制那一行

给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明:你不能倾斜容器。


实例

使用暴力遍历方法,记录最优解,因为只出现两个变量,遍历所有可能的两个变量只需要O(N**2)

双指针法,同时利用遍历中记录最优解的方法,出现短板指导思想(从最外面开始遍历(包含所有经过组合)),即更换长板只可能使得容积不增,而更换短板可能使得容积增加,故移动短板。

相关文章

  • 2021-07-12leetcode刷题

    所以使用len(nums)-k,而不是-k 三数之和给你一个包含 n 个整数的数组 nums,判断 nums 中是...

  • 刷题刷题

    时间紧迫,任务繁重,又有疫情影响,搞的人心惶惶,一时间复习得不安宁,又舍不得摆烂。 在焦灼、惶恐的情绪中,紧张急迫...

  • 2022-09-16

    刷题,刷题还是刷题

  • 2018-07-16

    刷题,祸害的何止是教育? 报班,刷题;买练习册,刷题;家教,刷题;跟不上,刷题;学得好,刷题;为了抢跑,刷题;为了...

  • 刷题啊刷题

    因为月底又要考试,所以最近几天一直在刷题。按说是看了书再看视频再刷题效果比较好才是。可是来不及了啊。 上次考试,就...

  • 刷题啊刷题

    刷题啊刷题 因为11月中旬要举行期中考试,所以最近几天,学校精心组织,一直在刷题。按说是看了书再看PPT课件或教师...

  • 2020-02-01关于刷题的几个建议

    算法刷题 针对性刷题,刻意练习。刻意刷题!不是麻木刷题!刷题前一定要先看书,清楚明白为什么要刷这些题,这些题刷完能...

  • 刷题

    清早起来刷题 吃饭也在刷题 上厕所也在刷题 中午也在刷题 下午也在刷题 晚上也在刷题 一天到晚都在刷题 考试马上到...

  • 程序猿刷题网站你知道吗?

    Coderbyte 刷题网LeetCode 刷题网Stack Overflow 刷题网

  • 教你怎么做一只考试锦鲤

    考试前14天疯狂刷题,各个平台疯狂刷题,刷题就对了。 刷的越多,大脑记得越多,也许你刷10道题,能记住的只有1道题...

网友评论

      本文标题:2021-07-12leetcode刷题

      本文链接:https://www.haomeiwen.com/subject/egndpltx.html