• python基础:3.高级运算符


    1.异或运算

      十进制的异或运算,先转成二进制进行异或,按位进行比较,对应位置相同则为0,对应位置不同则为1,,再从异或结果转成十进制。

      python中:

      1 ^ 1 = 0   

      1 ^ 2 = 3

      1 ^ 0 = 1

      0 ^ 1 = 1

      1 的二进制0000 0001

      2 的二进制0000 0010

      1 ^ 2 的二进制是:0000 0011 换算成十进制为3

      异或的交换律  1 ^ 0 = 0 ^ 1

      异或的结合律   1 ^ 2 ^ 3 =  1 ^ (2 ^ 3)

    一个非空整数列表,除了某个元素只出现一次外,其余每个元素均出现两次,找到只出现一次的元素,leetcode136

    例如 [1,2,3,4,3,2,1]
    异或的结合律和交换律
    1 ^ 2 ^ 3 ^ 4 ^ 3 ^ 2 ^ 1 = 1 ^ 1 ^ 2 ^ 2 ^ 3 ^ 3 ^ 4 = 0 ^ 4 = 4 def solve(li): temp = li[0] for i in range(1,len(li)): temp = temp ^li[i] print(temp) 结果:4


    一般解法:
    def solve(li):
    for i in range(len(li)):
    ret = li.count(li[i])
    if ret == 1:
    print(li[i])

    solve([1,2,3,4,3,2,1])

    结果:4
    1 - n 放在含有 n + 1 个元素的列表中,只有唯一的一个元素值重复,其他均只出现一次,每个列表元素只能访问一次,设计一个算法,将它找出来,不能使用辅助存储空间 Leetcode 287
    分析:找出重复的元素。
    1-5个元素的列表-- [1,2,3,4,5]
    5+1个元素的列表---[0,1,2,3,4,5]
    [1,2,3,3,4,5]  找出3 
    同样的异或结合律和交换律
    0 ^ 1 ^ 2 ^ 3 ^ 4 ^ 5 ^ 1 ^ 2 ^ 3 ^ 3 ^ 4 ^ 5
    思路:一个数奇数次异或自己就是本身,偶数次异或自己就是0,要找出3,就让3自己异或自己奇数次。其他数异或自己偶数次,就可以了。
    
    0 ^ 1 ^ 2 ^ 3 ^ 4 ^ 5 ^ 1 ^ 2 ^ 3 ^ 3 ^ 4 ^ 5 = 1 ^ 1 ^ 2 ^ 2 ^ 0 ^ 3 ^ 3 ^ 3 ^ 4 ^ 4 ^ 5 ^ 5  = 3
    
    def sove(li):
        ret = 0
        temp_li = [x for x in range(0,len(li)]
            for i in range(0, len(temp_li))
                ret = ret ^ li[i] ^ temp_li[i]
            print(ret)
    
    sove([1,2,3,3,4,5])
    
    结果:3

     2.按位运算

      按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0

      a = 1111  0100

      b = 1001 1011

      a & b = 1001 0000

      

  • 相关阅读:
    安装AD域时,出现NetBIOS名称冲突?
    SharePoint Server 2010 安装图解
    Visual C++ 2011519
    Visual C++ 2011520
    Visual C++ 2011518
    Visual C++ 2011520
    设计模式创建型 C++版本
    线程条件变量,一次性初始化
    Visual C++ 2011526
    Visual C++ 2011512
  • 原文地址:https://www.cnblogs.com/meloncodezhang/p/11272702.html
Copyright © 2020-2023  润新知