LeetCode——栈(一)

这篇博客探讨了三个算法问题:根据兔子的回答计算兔子数量,有序数组的合并以及格雷编码的生成。首先,`numRabbits` 函数通过分析兔子的颜色回答来确定总数。接着,`merge` 函数实现了将两个有序数组合并为一个有序数组的过程。最后,`grayCode` 函数生成了指定长度的格雷编码序列。这些算法在计算机科学和数据处理中有着广泛应用。
摘要由CSDN通过智能技术生成

一 题目:森林中,每个兔子都有颜色。其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在 answers 数组里。链接地址

class Solution(object):
    def numRabbits(self, answers):
        """
        :type answers: List[int]
        :rtype: int
        """
        count = Counter(answers)
        s = sum((x+y)//(y+1)*(y+1) for y, x in count.items())
        return s

二 题目:给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。

  • 示例1

输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]

  • 示例2

输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]

  • 代码
class Solution(object):
    def merge(self, nums1, m, nums2, n):
        """
        :type nums1: List[int]
        :type m: int
        :type nums2: List[int]
        :type n: int
        :rtype: None Do not return anything, modify nums1 in-place instead.
        """
        if len(nums1) == 0 and len(nums2) == 0:
            return None
        if len(nums1) == 0:
            return nums2
        if len(nums2) == 0:
            return nums1
        tail = m + n -1
        p1, p2 = m-1 , n-1
        while p1>= 0 or p2 >=0:
            if p1 == -1:
                nums1[tail] = nums2[p2]
                p2 -= 1
            elif p2 == -1:
                nums1[tail] = nums1[p1]
                p1 -= 1
            elif nums1[p1] > nums2[p2]:
                nums1[tail] = nums1[p1]
                p1 -= 1
            else:
                nums1[tail] = nums2[p2]
                p2 -= 1
            tail -= 1

题目三:格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。

  • 给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。即使有多个不同答案,你也只需要返回其中一种。

输入: 2
输出: [0,1,3,2]
解释:
00 - 0
01 - 1
11 - 3
10 - 2
对于给定的 n,其格雷编码序列并不唯一。
例如,[0,2,3,1] 也是一个有效的格雷编码序列。

class Solution(object):
    def grayCode(self, n):
        """
        :type n: int
        :rtype: List[int]
        """
        res = [0]
        for i in range(1, (1 << n)):
            res.append(res[-1] ^ (i & -i))
        return res

题目四:给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。

class Solution(object):
    def subsetsWithDup(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        nums.sort()
        result = [[]]
        for i in nums:
            res = []
            for j in result:
                if j + [i] not in result:
                    res += [j + [i]]
            result += res
        return result

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值