• 40.数组中只出现一次的数字(python)


    题目描述

    一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
     
    思路
    将数组的因为就两个数只出现一次,所以,这些数字做异或之后,得到的结果是这两个数做异或的结果,比如  1 2 1 2 3       4 5 5 4 7  做完异或就是3^7   011^111=100
    在最后的结果中,从右往左找出现的第一个1,发现在第三位,把100取出来,对原数组每个数进行与运算,与左边与得到的结果都是0   与右边做与运算得到的结果都是1,这样就可以找到这两个子数组了,按这两个子数组里面每个数做异或,就得到了两个数组
    中出现一次的数  3  和   7    神奇
     1 # -*- coding:utf-8 -*-
     2 class Solution:
     3     # 返回[a,b] 其中ab是出现一次的两个数字
     4     def FindNumsAppearOnce(self, array):
     5         # write code here
     6         if len(array)<2:
     7             return None
     8         tmpnum = None
     9         for num in array:
    10             if tmpnum==None:
    11                 tmpnum = num
    12             else:
    13                 tmpnum ^=num
    14         count = 0
    15         while tmpnum%2==0:
    16             tmpnum = tmpnum >>1
    17             count +=1
    18         mask = 1 << count
    19         firstNum = None
    20         secondNum = None
    21         for num in array:
    22             if num&mask == 0:
    23                 if firstNum == None:
    24                     firstNum = num
    25                 else:
    26                     firstNum ^=num
    27             else:
    28                 if secondNum == None:
    29                     secondNum = num
    30                 else:
    31                     secondNum ^= num
    32         return firstNum,secondNum
    33         

    2019-12-23 14:58:21

  • 相关阅读:
    python中xlrd模块
    2021, 8, 26模拟赛
    2021, 8,24 模拟赛
    每天挂 0 的小技巧
    2021,8,23 模拟赛
    异常处理
    64位 windows10,MYSQL8.0.13重置密码(忘记密码或者无法登录)
    Android仓库
    学习笔记索引
    「学习笔记」各类容斥反演总结
  • 原文地址:https://www.cnblogs.com/NPC-assange/p/12083797.html
Copyright © 2020-2023  润新知