博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode]Single Number II
阅读量:5274 次
发布时间:2019-06-14

本文共 829 字,大约阅读时间需要 2 分钟。

今天室友推荐了一道LeetCode上面的练习题,题目大概的意思是有一个整形的数组,里面只有一个数是出现一次的,其他的数都出现了三次,然后让把这个数找出来。

第一眼看到这个问题,就觉得最简单的应该是用Hash表来解答了,暴力破解很傻的解法,但是也想不出其他的办法。然后看了网上的一些指导,有其他的两种解法,有一种比较容易理解,另外一种就。。。

现在把容易理解的那个方法做一下记录。

因为整形基本都是32位,开一个32位的数组用来记录数组中所有的数在这一位上的二进制的和。因为只有一个数是出现一次,其他的数都是出现3次,所以对数组中每一个元素取3的余数,这样就可以得到出现一次的那个数每一位的值,再把这些值组合成一个整数,结果就是所需要的整数。

C++代码如下:

class Solution {public:    int singleNumber(int A[], int n) {        int count[32] = {0};        int result = 0;        for(int i = 0; i < 32; i++)        {            for(int j = 0; j < n; j++)            {                if((A[j] >> i) & 1)                    count[i]++;            }                        result |= ((count[i] % 3) << i);        }        return result;    }};

使用python来实现该算法需要考虑负数的问题,因为python的整形会自动调整大小,出现负数的话就会出现长度转换,运行结果出错。

转载于:https://www.cnblogs.com/liuyikang/p/4330607.html

你可能感兴趣的文章
【好程序员笔记分享】——下拉刷新和上拉加载更多
查看>>
多线程,多进程,协程
查看>>
Hacker News与Reddit的算法比较
查看>>
Learning Python 009 dict(字典)和 set
查看>>
JavaScript中随着鼠标拖拽而移动的块
查看>>
HDU 1021 一道水题
查看>>
进击的 JavaScript(六) 之 this
查看>>
The operation couldn’t be completed. (LaunchServicesError error 0.)
查看>>
php每天一题:strlen()与mb_strlen()的作用分别是什么
查看>>
编程中定义的方法报异常问题
查看>>
使用STM32F103ZET霸道主板实现SD卡的读写(非文件系统)
查看>>
工作中收集JSCRIPT代码之(下拉框篇)
查看>>
《转载》POI导出excel日期格式
查看>>
code异常处理
查看>>
git - 搭建最简单的git server
查看>>
.net中从GridView中导出数据到excel(详细)
查看>>
[LeetCode]Single Number II
查看>>
poj3216 Prime Path(BFS)
查看>>
使用IntelliJ IDEA 2016创建maven管理的Java Web项目
查看>>
R语言 线性回归
查看>>