zoukankan      html  css  js  c++  java
  • 基础算法

    1. 一个列表list,里面只有一个数出现了一次,其他数都出现了两次。在时间复杂度O(n),空间复杂度O(1)下输出出现一次的数:

    def selectnum(list):
        a = 0
        for i in list:
            a = a ^ i
        return a
    #^为异或运算。数a异或运算数b两次,结果仍为数a。
    #^运算可以将两个相同的数清零。
    只出现一次的数字

    2. 一个列表list,里面只有一个数出现了一次,其他数都出现了三次。在时间复杂度O(n),空间复杂度O(1)下输出出现一次的数:

    #位运算解决
    class Solution:
        def singleNumber(self, nums):
            """
            :type nums: List[int]
            :rtype: int
            """
            a, b = 0, 0
            for num in nums:
                b = ~a & (b ^ num)
                a = ~b & (a ^ num)
            return b
    
    #数学运算解决
    class Solution(object):
        def singleNumber(self, nums):
            return (3*sum(set(nums)) - sum(nums))/2
    #解析:
    #3*sum(set(nums))为去重后的结果的三倍,比sum(nums)多了两个只出现一次的结果,所以除以2即的只出现一次的数字。但是空间复杂度不O(1).
    只出现一次的数字2.0
  • 相关阅读:
    Flask——session
    UISB ScrollView
    UISB 登陆
    UISB TextField
    UISB 进步器 分栏控制器
    UISB UISlider ProgressView
    UISB Switch
    UISB 定时器
    Django-Celery文档
    UISB UIViewController
  • 原文地址:https://www.cnblogs.com/ppzhang/p/10487581.html
Copyright © 2011-2022 走看看