zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    java中的泛型
    那些java中的包装类
    那些java中的内部类
    那些java中的常用类(二)
    那些java中的常用类(一)
    java中的反射机制浅析
    java中的垃圾回收机制浅析
    java中equals与==的用法浅析
    在iOS项目中,这样才能完美的修改项目名称
    最新的 iOS 申请证书与发布流程
  • 原文地址:https://www.cnblogs.com/NPC-assange/p/12083797.html
Copyright © 2011-2022 走看看