美文网首页
进制: 找出那个掉单的元素(OddManOut)

进制: 找出那个掉单的元素(OddManOut)

作者: 极光火狐狸 | 来源:发表于2018-09-27 19:55 被阅读4次

python

# -.- coding:utf-8 -.-
# 在乱序的数字列表中, 每个数字都会出现两次,
# 但其中有一个数字是只出现一次的, 现在需要
# 找出那个掉单的数字!
from __future__ import print_function


def odd_man_out_onlogn(values):
    """
    如果是我来写, 那么将会是这个代码,
    速度估计是O(nlognnnnnnn)
    """
    s = {}
    result = 0
    for value in values:
        if not s.get(value):
            s[value] = 0
        s[value] += 1

    for i in s:
        if s[i] == 1:
            result = i

    return result


def odd_man_out_on(values):
    """
    速度: O(n)
    空间: O(n)
    """
    s = set()
    total = 0
    for value in values:
        if value in s:
            total -= value
        else:
            s.add(value)
            total += value
    return total


def odd_man_out_o1(values):
    """
    速度: O(n)
    空间: O(1)
    """
    mask = 0
    for value in values:
        mask ^= value
    return mask


def debug_odd_man_out(values):
    """
    打印日志分析为什么可以找出这个单一的数字!
    """
    mask = 0
    for value in values:
        before = mask
        print("mask:  ", bin(mask)[2:].zfill(8))
        print("value: ", bin(value)[2:].zfill(8))
        mask ^= value
        print("xor:   ", bin(mask)[2:].zfill(8))
        print("result: {} xor {} == {}".format(before, value, mask))
        print("\n"*3)
    return mask


def main():
    values = [5, 1, 2, 3, 0, 1, 4, 2, 5, 0, 3]
    print(odd_man_out_onlogn(values))
    print(odd_man_out_on(values))
    print(odd_man_out_o1(values), end="\n"*3)

    print(debug_odd_man_out(values))


if __name__ == '__main__':
    main()

# output
4
4
4


mask:   00000000
value:  00000101
xor:    00000101
result: 0 xor 5 == 5




mask:   00000101
value:  00000001
xor:    00000100
result: 5 xor 1 == 4




mask:   00000100
value:  00000010
xor:    00000110
result: 4 xor 2 == 6




mask:   00000110
value:  00000011
xor:    00000101
result: 6 xor 3 == 5




mask:   00000101
value:  00000000
xor:    00000101
result: 5 xor 0 == 5




mask:   00000101
value:  00000001
xor:    00000100
result: 5 xor 1 == 4




mask:   00000100
value:  00000100
xor:    00000000
result: 4 xor 4 == 0




mask:   00000000
value:  00000010
xor:    00000010
result: 0 xor 2 == 2




mask:   00000010
value:  00000101
xor:    00000111
result: 2 xor 5 == 7




mask:   00000111
value:  00000000
xor:    00000111
result: 7 xor 0 == 7




mask:   00000111
value:  00000011
xor:    00000100
result: 7 xor 3 == 4




4

 
 

rust

fn example(x: &[i32]) -> i32 {
    let mut mask : i32 = 0;
    for i in x {
        mask ^= *i;
    }
    mask
}

fn main() {
    println!("main: {}", example(&[5, 1, 2, 3, 0, 1, 4, 2, 5, 0, 3]));
}

相关文章

  • 进制: 找出那个掉单的元素(OddManOut)

    python rust

  • C#泛型委托

    任务: (1)找出int数组里面最大值的那个元素(2)找出string数组里面最长的那个元素(3)找出Person...

  • 十大排序算法之选择排序

    执行流程 从序列中找出最大的那个元素,然后与末尾元素交换位置。(执行完一轮后,最末尾的那个元素就是最大的元素) 忽...

  • 1.5 如何找出单链表中倒数第k个元素

    题目 找出单链表中倒数第k个元素,例如给定1>2>3>4>5>6>7,则单链表中的倒数第k=3个元素为5.

  • CSS-DOM

    1.利用DOM找出文档中的所有h1元素,在找出紧跟在每个h1元素后面的那个元素,并把样式添加给它。story.ht...

  • 找出主要元素

    题目: leetcode169给出一个size为n的数组,找出主要元素,即出现次数超过n/2次的元素 思路一: 用...

  • 单链表

    单链表 单链表问题与思路 找出单链表的倒数第K个元素(仅允许遍历一遍链表)使用指针追赶的方法。定义两个指针fast...

  • sicily_1014 Specialized Four-Dig

    题目链接:http://soj.sysu.edu.cn/1014 题目大意 找出所有在10进制、12进制、16进制...

  • 使用requests与bs4爬取网站②

    找出所有含特定标签的HTML元素 使用select找出含有h1标签的元素 使用select找出含有a标签的元素 取...

  • 常见的排序算法-2.1 选择排序

    选择排序(Selection Sort) 从序列中找出最大的那个元素,然后与最末尾的元素交换位置 执行完一轮后,最...

网友评论

      本文标题:进制: 找出那个掉单的元素(OddManOut)

      本文链接:https://www.haomeiwen.com/subject/rilyoftx.html