zoukankan      html  css  js  c++  java
  • leetcode语法练习(二)

    leetcode语法练习(二)

    1.存在重复

    给定一个整数数组,判断是否存在重复元素。

    如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。

    示例 1:

    输入: [1,2,3,1]
    输出: true
    

    示例 2:

    输入: [1,2,3,4]
    输出: false
    

    示例 3:

    输入: [1,1,1,3,3,4,3,2,4,2]
    输出: true
    
    class Solution:
        def containsDuplicate(self, nums: List[int]) -> bool:
            dic = {}
            if len(nums) > 0:
                for i in nums:
                    if i in dic:
                        dic[i] += 1
                    else :
                        dic[i] = 1
                for j in dic :
                    if dic[j] > 1:
                        return True
                        break
                else:
                    return False
            else :
                return False
    

    2.只出现一次的数字

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

    说明:

    你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

     class Solution:
        def singleNumber(self, nums: List[int]) -> int:
        dic = {}
            for i in nums:
                if i in dic:
                    dic[i] += 1
                else :
                    dic[i] = 1
            for j in dic :
                if dic[j] == 1 :
                    return j
                    break
    

    3.两个数组的交集 II

    给定两个数组,编写一个函数来计算它们的交集。

    示例 1:

    输入: nums1 = [1,2,2,1], nums2 = [2,2]
    输出: [2,2]
    

    示例 2:

    输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
    输出: [4,9]
    

    说明:

    • 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
    • 我们可以不考虑输出结果的顺序。

    进阶:

    • 如果给定的数组已经排好序呢?你将如何优化你的算法?
    • 如果 nums1 的大小比 nums2 小很多,哪种方法更优?
    • 如果 nums2 的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?
    class Solution:
        def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
            s1 =set(nums1)
            s2 =set(nums2)
            lis2 = []
            lis = list(s1 & s2)
            for i in lis :
                if nums1.count(i)  > nums2.count(i) :
                    lis2.extend([i]*nums2.count(i))
                else :
                    lis2.extend([i]*nums1.count(i))
            return lis2
    

    4.加一

    给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

    最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。

    你可以假设除了整数 0 之外,这个整数不会以零开头。

    示例 1:

    输入: [1,2,3]
    输出: [1,2,4]
    解释: 输入数组表示数字 123。
    

    示例 2:

    输入: [4,3,2,1]
    输出: [4,3,2,2]
    解释: 输入数组表示数字 4321。
    
    class Solution:
        def plusOne(self, digits: List[int]) -> List[int]:
            j = len(digits)
            for i in range(j) :
                if digits[j-1-i] < 9:
                    digits[j-1-i] += 1
                    break
                else :
                    digits.pop(j-1-i)
                    digits.insert(j-1-i,0)
                    if i == j-1 :
                        digits.insert(0,1)
            return digits
                    
    

    5.移动零

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

    示例:

    输入: [0,1,0,3,12]
    输出: [1,3,12,0,0]
    

    说明:

    1. 必须在原数组上操作,不能拷贝额外的数组。
    2. 尽量减少操作次数。
    class Solution:
        def moveZeroes(self, nums: List[int]) -> None:
            """
            Do not return anything, modify nums in-place instead.
            """
            for i in nums :
                if i == 0:
                    nums.remove(i)
                    nums.append(i)
    

    6. 整数反转

    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

    示例 1:

    输入: 123
    输出: 321
    

    示例 2:

    输入: -123
    输出: -321
    

    示例 3:

    输入: 120
    输出: 21
    

    注意:

    假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

    class Solution:
        def reverse(self, x: int) -> int:
            lis = list(str(x))
            if lis[0] != '-' :
                lis.reverse()
                s = ''.join(lis)
                if int(s) <=  2**31 - 1:
                    return int(s)
                else :
                    return 0
            else :
                lis.pop(0)
                lis.reverse()
                s = ''.join(lis)
                if int(s) <=  2**31:
                    return -int(s) 
                else :
                    return 0
    
  • 相关阅读:
    盛最多水的容器
    除自身以外数组的乘积
    组合总和
    旋转图像
    找到所有数组中消失的数字
    RSA加密、签名机制
    SpringBoot-从新建一个项目看起
    linux下vi命令修改文件及保存的使用方法
    集合
    第一个注解式的SpringMVC项目
  • 原文地址:https://www.cnblogs.com/WilliamKong94/p/10860200.html
Copyright © 2011-2022 走看看