leetcode刷题日志4.0

目录

前言:

1.三个数的最大乘积

2.错误的集合 

 3.机器人能否返回原点

4.最长连续递增序列 

 5.验证回文串 II

 6.交替位二进制数


前言:

        五一假期结束了,大家玩的开心吗?不过我们还得回到我们的日常生活学习工作当中,那今天我就分享一下我个人写了的leetcode习题,一起来看看吧。(编程语言:Python)

1.三个数的最大乘积

给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。 

class Solution:
    def maximumProduct(self, nums):
        nums=sorted(nums,reverse=True)
        n1=nums[0]*nums[1]*nums[2]
        n2=nums[0]*nums[len(nums)-1]*nums[len(nums)-2]
        return max(n1,n2)

 题解:拿到这个数组先进行由大到小排序,这里我们要分有没有负数的情况下去讨论,如果全都是正数的话,那最大值毫无疑问就是前三个最大的数字之间的乘积;如果有负数的话那也要看负数的个数,如果只有一个分数的话那最大结果也还是前三个最大正数的乘积,如果有两个负数以上的话就要考虑第一个最大的数字和最小的两个负数乘积的结果。总的来说我们要的最大三个数的乘积要么是前三个大的数字的乘积,要么就是最大的数字与最小的两个数字之间的乘积。

2.错误的集合 

集合 s 包含从 1 到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复 。

给定一个数组 nums 代表了集合 S 发生错误后的结果。

请你找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。

class Solution:
    def findErrorNums(self, nums):
        c=k=0
        li=[x for x in range(1,len(nums)+1)]
        for i in range(len(nums)):
            if nums[i] in nums[i+1:]:
                k=i
        for j in li:
            if j not in nums:
                c=j
                break
        return [nums[k],c]

 题解:对于这类题,我们先创建一个1到n的列表,作为一个比较的参照物。首先找出nums中重复出现的数字的位置 k,然后对nums进行循环,找到不在li中的数字,最后我们输出这个重复的数字和丢失的数字就行了

 3.机器人能否返回原点

在二维平面上,有一个机器人从原点 (0, 0) 开始。给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束。

移动顺序由字符串 moves 表示。字符 move[i] 表示其第 i 次移动。机器人的有效动作有 R(右),L(左),U(上)和 D(下)。

如果机器人在完成所有动作后返回原点,则返回 true。否则,返回 false。

注意:机器人“面朝”的方向无关紧要。 “R” 将始终使机器人向右移动一次,“L” 将始终向左移动等。此外,假设每次移动机器人的移动幅度相同。

class Solution:
    def judgeCircle(self, moves) :
        r=moves.count('R')
        l=moves.count('L')
        u=moves.count('U')
        d=moves.count('D')
        return r==l and u==d

题解:这类题非常简单,我们只需要去统计R L U D 这四个字符串出现的个数就行了,只要R和L的个数相等已经U和D之间的个数相等就可以返回到原点.

4.最长连续递增序列 

给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。

连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。

class Solution:
    def findLengthOfLCIS(self, nums):
        count=1
        li=[]
        nums.append(-9)
        for i in range(len(nums)-1):
            if nums[i+1]>nums[i]:
                count+=1
            else:
                li.append(count)
                count=1
        return max(li)

 题解:我们先给这个数组末尾加上一个负数,然后进行统计就行了,当前一个数字大于后面一个数字的时候count就加上1,反之就把count放入到列表li当中,count回到0,然后进行重新计数,直到这个数组遍历完成,我们只需要返回列表li中最大的count就行了.

 5.验证回文串 II

给你一个字符串 s,最多 可以从中删除一个字符。

请你判断 s 是否能成为回文字符串:如果能,返回 true ;否则,返回 false 。

class Solution:
    def validPalindrome(self, s):
        l=0
        r=len(s)-1
        while l<r and s[l]==s[r]:
            l+=1
            r-=1
        s1=s[0:l]+s[l+1:]
        s2=s[0:r]+s[r+1:]
        return s1==s1[::-1] or s2==s2[::-1]

题解:这类题我们只需要去对这个字符串进行遍历,然后分别从头和尾找出不一致的字符出来,然后以其中一个不同的字符为界限分别对这个字符前面和后面的字符串进行拼接得到一个新的字符是1,另一个不同的字符也是同样的操作得到s2,此时的s1和s2就是分别删除掉的第一个异同的字符和第二个异同的字符后的新字符串,我们只需要去判断在两个字符串是否至少有一个是满足回文字符串就行了。

 6.交替位二进制数

给定一个正整数,检查它的二进制表示是否总是 0、1 交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。 

class Solution:
    def hasAlternatingBits(self, n):
        b=bin(n)[2:]
        return '00' not in b and '11' not in b

题解:这类题做法是很简单的,我们只需要去判断这个字符串里面有没有出现'00'或者'11'就行了,如果出现就说明这个字符串不满足1 和 0之间相间出现。

好了,以上就是今天的习题了,你们学会了吗? 

分享一张壁纸:

猜你喜欢

转载自blog.csdn.net/m0_73633088/article/details/130477126