zoukankan      html  css  js  c++  java
  • LeetCode

    1、两数字之和


     

    给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

    你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

    示例:

    给定 nums = [2, 7, 11, 15], target = 9
    
    因为 nums[0] + nums[1] = 2 + 7 = 9
    所以返回 [0, 1]
    

    1、暴力搜索 O(n^2)

    # 方案1:暴力搜索
    def twoSum1(nums, target):
        n = len(nums)
        for i in range(n):
            for j in range(i+1,n):      # 用x+1是减少不必要的循环,y的取值肯定是比x大
                if nums[i]+nums[j] == target:
                    return i,j

     2、优化版本

    # 方案2:求差值,判断差值是否在nums数组里
    # 时间复杂度:O(n2),空间复杂度:O(1)   (
    # 补充:python中list对象的存储结构采用的是线性表,因此其查询复杂度为O(n)
    # 也就是 if b in nums 时间复杂度是O(n))
    def twoSum2(nums, target):
        n = len(nums)
        for i in range(n):
            j = target-nums[i]
            if j in nums:
                if i != nums.index(j):
                    return i,nums.index(j)

    3、 hash表:字典

    # 时间复杂度:O(1) 、空间复杂度O(n)
    # 补充:dict对象的存储结构采用的是散列表(hash表),其在最优情况下查询复杂度为O(1))
    def twoSum(nums, target):
    
        dic = {}
        n = len(nums)
        for i in range(n):
            j = target - nums[i]
    
            if nums[i] in dic:  # 字典dic中存在nums[i]时
                return dic[nums[i]],i
    
            else:
                dic[j] = i  # 否则往字典增加键/值对
    
                # 边往字典增加键/值对,边与nums[i]进行对比
        return dic
    
    print(twoSum([3,2,4],6))

     2、翻转整数

    给定一个 32 位有符号整数,将整数中的数字进行反转。

    示例 1:

    输入: 123
    输出: 321
    

     示例 2:

    输入: -123
    输出: -321
    

    示例 3:

    输入: 120
    输出: 21
    

    注意:

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

    1、lowB写法

    class Solution:
        def reverse(self, x):
            """
            :type x: int
            :rtype: int
            """
            if x < 0:
                x = list(str(x)[1:])
                x.reverse()
                ret = ''.join(x)
                ret = '-' + ret
                ret = int(ret)
                if (2**31-1) < ret or (-2**31) > ret:
                    return 0
                else:
                    return ret
    
            else:
                x = list(str(x))
                x.reverse()
                ret = ''.join(x)
                ret = int(ret)
                if (2**31 - 1) < ret or (-2**31) > ret:
                    return 0
                else:
                    return ret
            

    2、大神写法

    利用R = X[::-1]这种方法对X(X必须是字符串)进行一个反转复制的操作

    class Solution:
        def reverse(self, x):
            """
            :type x: int
            :rtype: int
            """
            flag = 1
            if x < 0:
                flag = -1
            ret = str(abs(x))[::-1]
            ret = int(ret)
            return ret*flag if -2147483648 < ret < 2147483647 else 0
    3、flag标志位使用的小技巧
    flag是用来判断输入值正负的标志值。用 11 和 1−1 作为其判断值,可以在返回时,无需使用if语句,只需要返回数值乘以flag即可,使代码更加精简。

    3、大大神代码

    class Solution(object):
        def reverse(self, x):
            """
            :type x: int
            :rtype: int
            """
            x = int(str(x)[::-1]) if x >= 0 else - int(str(-x)[::-1])
            return x if x < 2147483648 and x >= -2147483648 else 0

    3、回文数


     

    判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

    示例 1:

    输入: 121
    输出: true
    

    示例 2:

    输入: -121
    输出: false
    解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
    

    示例 3:

    输入: 10
    输出: false
    解释: 从右向左读, 为 01 。因此它不是一个回文数。
    

    进阶:

    你能不将整数转为字符串来解决这个问题吗?

    1、我的代码

    class Solution:
        def isPalindrome(self, x):
            """
            :type x: int
            :rtype: bool
            """
            x = str(x)
            x1 = x[::-1]
            return True if x==x1 else False

    2、大神代码

    def is_palindrome(n):
        n=str(n)
        m=n[::-1]
        return n==m

    4

    5

    6

  • 相关阅读:
    我的省选 Day -9
    我的省选 Day -10
    我的省选 Day -11
    我的省选 Day -12
    我的省选 Day -13
    [NOI2013]快餐店
    我的省选 Day -14
    杭电多校2020第7场-E Expectation
    「联合省选2020」组合数问题
    UR#19 通用评测号
  • 原文地址:https://www.cnblogs.com/venicid/p/9498641.html
Copyright © 2011-2022 走看看