• 【刷题】LeetCode刷刷刷 — 2021-05-31(1)


    一、在排序数组中查找数字 I

    题目描述

    统计一个数字在排序数组中出现的次数。
    

    示例

    示例 1:
    
    输入: nums = [5,7,7,8,8,10], target = 8
    输出: 2
    示例 2:
    
    输入: nums = [5,7,7,8,8,10], target = 6
    输出: 0
    

    解题

    from collections import Counter
    
    class Solution:
        def search(self, nums: List[int], target: int) -> int:
            for k, v in dict(Counter(nums)).items():
                if k == target:
                    return v
            return 0
    

    统计元素的出现次数,那么还是用Counter

    Counter(nums)统计结果再转成dict,遍历dict里的key,value
    key==target,输出value

    二、2的幂

    题目描述

    给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
    
    如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。
    

    示例

    示例 1:
    
    输入:n = 1
    输出:true
    解释:20 = 1
    示例 2:
    
    输入:n = 16
    输出:true
    解释:24 = 16
    示例 3:
    
    输入:n = 3
    输出:false
    示例 4:
    
    输入:n = 4
    输出:true
    示例 5:
    
    输入:n = 5
    输出:false
     
    
    提示:
    -2^31 <= n <= 2^31 - 1
    

    解题

    class Solution:
        BIG = 2**30
        def isPowerOfTwo(self, n: int) -> bool:
            return n > 0 and Solution.BIG % n == 0
    

    一个数 n 是 2 的幂,当且仅当 n 是正整数。
    另外,题中提示出了-2^31 <= n <= 2^31 - 1,那么最大的2的幂就是2^30,那么只要n是2^30的约数
    即可。

    三、有效的字母异位词

    题目描述

    给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
    

    示例

    示例 1:
    
    输入: s = "anagram", t = "nagaram"
    输出: true
    示例 2:
    
    输入: s = "rat", t = "car"
    输出: false
    

    解题

    from collections import Counter
    
    class Solution:
        def isAnagram(self, s: str, t: str) -> bool:
            return dict(Counter(s)) == dict(Counter(t))
    

    思路:如果两个字符串中各字符出现的次数都是一样的,那么这两个就是有效的字母异位词。

    可以使用Counter分别统计两个入参中字符出现的频次,然后转化成dict,然后判断2个字典是否相等。

    四、合并两个有序数组

    题目描述

    给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
    
    初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。
    你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。
    

    示例

    示例 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:
        def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
            """
            Do not return anything, modify nums1 in-place instead.
            """
            nums1[m:] = nums2
            return nums1.sort()
    

    直接拼接,然后排序。

    注意的是,这里题目中有两个列表的长度要求,分别是mn。所以nums1从第m后拼接nums2,然后使用
    sort()方法排序。

    五、调整数组顺序使奇数位于偶数前面

    题目描述

    输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
    

    示例

    示例:
    
    输入:nums = [1,2,3,4]
    输出:[1,3,2,4] 
    注:[3,1,2,4] 也是正确的答案之一。
    

    解题

    class Solution:
        def exchange(self, nums: List[int]) -> List[int]:
            list_odd = []
            list_even = []
            for i in nums:
                if i % 2 == 0:
                    list_even.append(i)
                else:
                    list_odd.append(i)
            return list_odd + list_even
    

    采用最容易理解的方式的。遍历输入的列表,然后判断其中的元素,分别添加到对应的2个数组中。

    最后,把偶数数组list_even + 到奇数数组list_odd上。

    --不要用肉体的勤奋,去掩盖思考的懒惰--
  • 相关阅读:
    软件工程课后作业3:如何返回一个整数数组中最大子数组的和
    软件工程课后作业2:四则运算题目扩展:可指定题目数量并且支持真分数运算
    软件工程课后作业1:三十道四则运算题目
    团队作业3返回整数数组中最大子数组的和(多个数组)
    求一个二维数组所有子数组和的最大值(郭少周,陈泽)
    郭少周和陈泽两人合作课堂练习和课下作业
    学生成绩查询系统个人NABCD
    返回一个整数组的最大子数组和
    个人项目3
    返回一个二维整数组中最大子数组的和
  • 原文地址:https://www.cnblogs.com/pingguo-softwaretesting/p/14829898.html
Copyright © 2020-2023  润新知