Python-Leetcode(169.187.189.283.287.290.292.326.412.414)

169.多数元素

给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/majority-element
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

def majorityElement(nums):
    nums.sort()
    size = len(nums) / 2
    i = 0
    while i < size:
        if nums[i] == nums[i+int(size)]:
            return nums[i]
        else:
            i += 1

def majorityElement2(nums):
    size = len(nums) / 2
    setnums = set(nums)
    for i in setnums:
        if nums.count(i) > size:
            return i

187.重复的DNA序列

DNA序列 由一系列核苷酸组成,缩写为 'A', 'C', 'G' 和 'T'.。

例如,"ACGAATTCCG" 是一个 DNA序列 。
在研究 DNA 时,识别 DNA 中的重复序列非常有用。

给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中出现不止一次的 长度为 10 的序列(子字符串)。你可以按 任意顺序 返回答案。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/repeated-dna-sequences
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

def repeatStr(s):
    L = 10
    res = []
    cnt = defaultdict(int)
    for i in range(len(s) - L + 1):
        sub = s[i: i + L]
        cnt[sub] += 1
        if cnt[sub] == 2:
            res.append(sub)
    return res

※:defaultdict(int) 用来计数且防止KeyError

189.轮转数组

给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

def rotate(nums):
    if k :=(k % len(nums)):
        nums[:k], nums[k:] = nums[-k:],nums[:-k]

※::=符号的作用是在表达式内获取变量值并赋给新变量。

这里带上if ,如果为0,原值不变,如果非0,则轮转

283.移动零

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

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

def moveZeroes(self, nums: List[int]) -> None:
    i = 0
    for num in nums:
        if num != 0: # num != 0
            nums[i] = num  # 不为0的从0位置开始放
            i += 1
            
    n = len(nums)
    for j in range(i,n):  # 剩余位置放0
        nums[j] = 0
    
    return nums

287.寻找重复数

给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。

假设 nums 只有 一个重复的整数 ,返回 这个重复的数 。

你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-the-duplicate-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

def dinfDuplicate(nums):
    nums.sort()
    i = 0
    while nums[i] != nums[i + 1]:
        i += 1
    return nums[i]

290.单词规律

给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。

这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/word-pattern
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

def wordPattern(pattern, s):
    s= s.split()
    return list(map(pattern.index, pattern)) == list(map(s.index, s))

※:map(obj.index, obj) 返回格式信息,map结果不同,需要用list包装一下

292.Nim游戏

你和你的朋友,两个人一起玩 Nim 游戏:

桌子上有一堆石头。
你们轮流进行自己的回合, 你作为先手 。
每一回合,轮到的人拿掉 1 - 3 块石头。
拿掉最后一块石头的人就是获胜者。
假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可以赢,返回 true;否则,返回 false 。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/nim-game
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

def canWinNim(n):
    return n % 4 != 0

326.3的幂

给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。

整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3x

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/power-of-three
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

def isPowerOfThree(n):
    while n and n % 3 == 0:
        n //= 3
    return n == 1

※:n大于0且能被3整除,则处于3,循环下去,最后判断是否为1

412.Fizz Buzz

给你一个整数 n ,找出从 1 到 n 各个整数的 Fizz Buzz 表示,并用字符串数组 answer(下标从 1 开始)返回结果,其中:

answer[i] == "FizzBuzz" 如果 i 同时是 3 和 5 的倍数。
answer[i] == "Fizz" 如果 i 是 3 的倍数。
answer[i] == "Buzz" 如果 i 是 5 的倍数。
answer[i] == i (以字符串形式)如果上述条件全不满足。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/fizz-buzz
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

def fizzBuzz(n):
    res = []
    for i in range(1,n+1):
        if i % 3 == 0 and i % 5 == 0:
            res.append('FizzBuzz')
        elif i % 3 == 0 and i % 5 != 0:
            res.append('Fizz')
        elif i % 3 != 0 and i % 5 == 0:
            res.append('Buzz')
        else:
            res.append(str(i))
    return res

414.第三大的数

给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。

def thirdMax(self, nums: List[int]) -> int:
    if len(nums) <= 2:
        return sorted(nums)[-1]
    else:
        lis = sorted(list(set(nums)))
        if len(lis) >= 3:
            return lis[-3]
        else:
            return lis[-1]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值