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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容