Python:基础入门练习121 - 130

2021/11/25 1:10:32

本文主要是介绍Python:基础入门练习121 - 130,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

# -*- coding: utf-8 -*-
# 121: 删除有序数组中的重复项 II
# 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。
# 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
# 示例 1:
# 输入:nums = [1,1,1,2,2,3]
# 输出:5, nums = [1,1,2,2,3]
# 解释:函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。
# 不需要考虑数组中超出新长度后面的元素。
#
# 示例 2:
# 输入:nums = [0,0,1,1,1,1,2,3,3]
# 输出:7, nums = [0,0,1,1,2,3,3]
# 解释:函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3 。
# 不需要考虑数组中超出新长度后面的元素。


class Solution121:
    def removeDuplicates(self, nums: list[int]) -> int:
        nums1 = nums[:]
        flag = True
        while flag:
            for i in nums1:
                if nums1.count(i) > 2:
                    nums1.remove(i)
            import collections
            if max(list(collections.Counter(nums1).values())) < 3:
                flag = False
            nums[:] = nums1


s121 = Solution121()
data121 = [0, 1, 0, 1, 0, 1, 8]
r121 = s121.removeDuplicates(data121)
print(data121)  # [0, 1, 0, 1, 8]


# 122: 有效的完全平方数
# 给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
# 进阶:不要 使用任何内置的库函数,如  sqrt 。
# 示例 1:
# 输入:num = 16
# 输出:true
# 示例 2:
# 输入:num = 14
# 输出:false


class Solution122:
    def isPerfectSquare(self, num: int) -> bool:
        r = num ** 0.5
        return True if int(r) == r else False


s122 = Solution122()
r122 = s122.isPerfectSquare(64)
print(r122)  # True


# 123: 找不同
# 给定两个字符串 s 和 t,它们只包含小写字母。
# 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
# 请找出在 t 中被添加的字母。
# 示例 1:
# 输入:s = "abcd", t = "abcde"
# 输出:"e"
# 解释:'e' 是那个被添加的字母。
# 示例 2:
# 输入:s = "", t = "y"
# 输出:"y"


class Solution123:
    def findTheDifference(self, s: str, t: str) -> str:
        # 如果s为空,结果=t0
        # 1计数器,2计数器
        # 遍历2的k,如果k在1,并且数目相等,继续遍历。
        # 如果k不在1或者数目不相等,则k
        if s == "":
            return t
        else:
            import collections
            d1 = collections.Counter(s)
            d2 = collections.Counter(t)

            for k, v in d2.items():
                if (k not in d1) or v != d1[k]:
                    return k


s123 = Solution123()
r123 = s123.findTheDifference("god", "good")
print(r123)  # o


# 124: 找到所有数组中消失的数字
# 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n]
# 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。
# 示例 1:
# 输入:nums = [4,3,2,7,8,2,3,1]
# 输出:[5,6]
# 示例 2:
# 输入:nums = [1,1]
# 输出:[2]


class Solution124:
    def findDisappearedNumbers(self, nums: list[int]) -> list[int]:
        # 新建列表
        # 求出实际长度,
        # 求出1-n所有
        # my_list  如果i不在nums  加入列表
        lend = len(nums)
        nums = set(nums)
        my_list = [i for i in range(1, lend + 1) if i not in nums]
        return my_list


s124 = Solution124()
r124 = s124.findDisappearedNumbers([2, 4, 5, 1, 8, 7])
print(r124)  # [3, 6]


# 125: 找到所有数组中消失的数字
# 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。
# 你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。
# 示例 1:
# 输入:num1 = "11", num2 = "123"
# 输出:"134"
# 示例 2:
# 输入:num1 = "456", num2 = "77"
# 输出:"533"
# 示例 3:
# 输入:num1 = "0", num2 = "0"
# 输出:"0"


class Solution125:
    def addStrings(self, num1: str, num2: str) -> str:
        # return eval(num1) + eval(num2)
        return str(int(num1) + int(num2))


s125 = Solution125()
r125 = s125.addStrings("8", "9")
print(r125)  # 17


# 126: 数组形式的整数加法
# 对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。
# 例如,如果 X = 1231,那么其数组形式为 [1,2,3,1]。
# 给定非负整数 X 的数组形式 A,返回整数 X+K 的数组形式。
# 示例 1:
# 输入:A = [1,2,0,0], K = 34
# 输出:[1,2,3,4]
# 解释:1200 + 34 = 1234
#
# 示例 2:
# 输入:A = [2,7,4], K = 181
# 输出:[4,5,5]
# 解释:274 + 181 = 455
#
# 示例 3:
# 输入:A = [2,1,5], K = 806
# 输出:[1,0,2,1]
# 解释:215 + 806 = 1021


class Solution126:
    def addToArrayForm(self, num: list[int], k: int) -> list[int]:
        # 合并成字符串,转成int
        # 加上K
        # 遍历字符串的总和
        a1 = int("".join([str(i) for i in num])) + k
        return [int(i) for i in str(a1)]


s126 = Solution126()
r126 = s126.addToArrayForm([9, 8, 7, 6], 123)
print(r126)  # [9, 9, 9, 9]


# 127: 剑指 Offer 56 - II. 数组中数字出现的次数 II
# 在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。
# 示例 1:
# 输入:nums = [3,4,3,3]
# 输出:4
#
# 示例 2:
# 输入:nums = [9,1,7,9,7,9,7]
# 输出:1


class Solution127:
    def singleNumber(self, nums: list[int]) -> int:
        # 计数器
        import collections
        d = [k for k, v in collections.Counter(nums).items() if v == 1]
        return d[0]


s127 = Solution127()
r127 = s127.singleNumber([6, 8, 6, 6, 8, 8, 8, 3])
print(r127)  # 3


# 128: 剑指 Offer 56 - I. 数组中数字出现的次数
# 一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。
# 要求时间复杂度是O(n),空间复杂度是O(1)。
# 示例 1:
# 输入:nums = [4,1,4,6]
# 输出:[1,6] 或 [6,1]
# 示例 2:
# 输入:nums = [1,2,10,4,1,4,3,3]
# 输出:[2,10] 或 [10,2]


class Solution128:
    def singleNumbers(self, nums: list[int]) -> list[int]:
        # 计数器
        import collections
        d = [k for k, v in collections.Counter(nums).items() if v == 1]
        return d


s128 = Solution128()
r128 = s128.singleNumbers([4, 1, 4, 6])
print(r128)  # [1, 6]


# 129: 将每个元素替换为右侧最大元素
# 给你一个数组 arr ,请你将每个元素用它右边最大的元素替换,如果是最后一个元素,用 -1 替换。
# 完成所有替换操作后,请你返回这个数组。
# 示例 1:
# 输入:arr = [17,18,5,4,6,1]
# 输出:[18,6,6,6,1,-1]
# 解释:
# - 下标 0 的元素 --> 右侧最大元素是下标 1 的元素 (18)
# - 下标 1 的元素 --> 右侧最大元素是下标 4 的元素 (6)
# - 下标 2 的元素 --> 右侧最大元素是下标 4 的元素 (6)
# - 下标 3 的元素 --> 右侧最大元素是下标 4 的元素 (6)
# - 下标 4 的元素 --> 右侧最大元素是下标 5 的元素 (1)
# - 下标 5 的元素 --> 右侧没有其他元素,替换为 -1
#
# 示例 2:
# 输入:arr = [400]
# 输出:[-1]
# 解释:下标 0 的元素右侧没有其他元素。


class Solution129:
    def replaceElements(self, arr: list[int]) -> list[int]:
        new_list = []
        for i, v in enumerate(arr):
            if i == len(arr) - 1:
                max_num = -1
            else:
                max_num = max(arr[i + 1:])
            new_list.append(max_num)
        return new_list


s129 = Solution129()
r129 = s129.replaceElements([4, 1, 4, 6])
print(r129)  # [6, 6, 6, -1]


# 130: 最常见的单词
# 给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。返回出现次数最多,同时不在禁用列表中的单词。
# 题目保证至少有一个词不在禁用列表中,而且答案唯一。
# 禁用列表中的单词用小写字母表示,不含标点符号。段落中的单词不区分大小写。答案都是小写字母。
# 示例:
# 输入:
# paragraph = "Bob hit a ball, the hit BALL flew far after it was hit."
# banned = ["hit"]
# 输出: "ball"
# 解释:
# "hit" 出现了3次,但它是一个禁用的单词。
# "ball" 出现了2次 (同时没有其他单词出现2次),所以它是段落里出现次数最多的,且不在禁用列表中的单词。
# 注意,所有这些单词在段落里不区分大小写,标点符号需要忽略(即使是紧挨着单词也忽略, 比如 "ball,"),
# "hit"不是最终的答案,虽然它出现次数更多,但它在禁用单词列表中。


class Solution130:
    def mostCommonWord(self, paragraph: str, banned: list[str]) -> str:
        # 计数器
        # 替换,.?
        # 分割句子,计数器
        # 从高到低看是不是在禁用。
        import string
        import collections
        paragraph = paragraph.lower()
        paragraph = paragraph.translate(str.maketrans('', '', string.punctuation))
        new_list = paragraph.split()
        c = collections.Counter(new_list)
        c = c.most_common()
        for i in c:
            if i[0] not in banned:
                return i[0]


s130 = Solution130()
r130 = s130.mostCommonWord("hello world hello python", ["hello", "world"])
print(r130)  # python

微信公众号:玩转测试开发
欢迎关注,共同进步,谢谢!



这篇关于Python:基础入门练习121 - 130的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程