剑指offer 面试56题
2024-10-19 07:33:43
面试56题:
题目:数组中数字出现的次数
题:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
解题思路:
方法一:异或运算,详见《剑指offer》P274
代码:
# -*- coding:utf-8 -*-
class Solution:
# 返回[a,b] 其中ab是出现一次的两个数字
def FindNumsAppearOnce(self, array):
# write code here
if len(array)<2:
return
resultEOR=0
for i in array:
resultEOR =resultEOR^ i index=self.FindFirstBit(resultEOR) res1,res2=0,0
for j in array:
if self.IsBit(j,index):
res1^=j
else:
res2^=j
return [res1, res2] def FindFirstBit(self,num):
'''
用于在整数num的二进制表示中找到最右边是1的位
'''
indexBit=0
while(num&1==0 and indexBit<32):
num=num>>1
indexBit+=1
return indexBit def IsBit(self,num,indexBit):
'''
用于判断在num的二进制表示中从右边起的indexBit位是否为1
'''
num = num >> indexBit
return (num&1)
方法二:利用python自带的counter库
# -*- coding:utf-8 -*-
class Solution:
# 返回[a,b] 其中ab是出现一次的两个数字
def FindNumsAppearOnce(self, array):
# write code here
from collections import Counter res=Counter(array).most_common()[-2:]
return list(map(lambda x:x[0],res))
最新文章
- ASP.NET Core应用针对静态文件请求的处理[5]: DefaultFilesMiddleware中间件如何显示默认页面
- Ionic2系列——在Ionic2中使用ECharts
- checkbox做全选按钮
- angurlarjs学习笔记
- Java正则抓取email
- Android刷机教程
- linux的sysctl基本配置
- CentOS6.x安装配置nginx
- 基于Open vSwitch搭建虚拟路由器
- ACM题目————数素数
- C# 之 HttpWebRequest类
- rfid 门卡系统和人体红外感应开发
- myEclipse中的web项目直接引入到eclipse中运行
- 前端跨域之html5 XMLHttpRequest Level2
- Linq 标准查询操作符三
- c# 大数据量比较时-方案
- 将当天时间转换为unix时间戳
- 201521123049 《JAVA程序设计》 第3周学习总结
- unity3d-游戏实战突出重围,整合游戏
- 对gulp的理解和使用(一)
热门文章
- Codeforces Round #277 (Div. 2)---A. Calculating Function (规律)
- gdb 详解
- iOSXib布局后代码修改约束的值
- mysql日期函数 和sql语句扩展information_schema show processlist;
- All in All - poj 1936 (子串)
- python笔记1,语法,函数,类和实例,异常
- 第一百七十二节,jQuery,动画效果
- vim-addon-manager【转】
- ios -为什么用WKWebView加载相同的html文本,有时展示的内容却不一样。
- 10道mysql查询语句面试题