python剑指offer数组中出现次数超过一半的数字
题目描述
思路:
def function_partion(lists, left, right):
# 划分函数处理部分
key = lists[left]
while left < right:
while left < right and lists[right] >= key:
right -= 1
lists[left] = lists[right]
while left < right and lists[left] <= key:
left += 1
lists[right] = lists[left]
lists[right] = key
return left def function(lists):
# 划分法主要函数部分
length = len(lists)
left = 0
right = length - 1
index = function_partion(lists, left, right)
k = length//2
while k != index:
if index > k - 1:
right = index - 1
else:
left = index + 1
index = function_partion(lists, left, right)
return lists[k-1] lists = [1, 2, 3, 2, 2, 2, 5, 4, 2]
print("思路(划分法):", function(lists))
# -*- coding:utf-8 -*- class Solution:
def MoreThanHalfNum_Solution(self, numbers):
if (numbers is None or len(numbers) == 0):
return 0
current = numbers[0]
flag = 1
for i in numbers[1:]:
if (i != current):
flag -= 1
else:
flag += 1
if (flag == 0):
current = i
flag = 1
if (flag >= 1):
count = 0
for i in numbers:
if (current == i):
count += 1
if (count > len(numbers)//2):
return current
return 0
第三种思路:
- 把代码量更短的代码放在前面,以裱门面…
- 用字典(键值对)实现。键存放数组中出现的数字,值存放对应数字出现的次数。
def MoreThanHalfNum_Solution(self, numbers):
dict = {}
for num in numbers:
dict[num] = 1 if num not in dict else dict[num]+1
if dict[num] > len(numbers)/2:
return num
return 0
python剑指offer数组中出现次数超过一半的数字的更多相关文章
- 剑指Offer——数组中出现次数超过一半的数字
题目描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2 ...
- 剑指Offer——数组中出现次数超过一半的数字——一题多解
看题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- 用js刷剑指offer(数组中出现次数超过一半的数字)
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- 剑指offer——数组中出现次数超过一半的数字(c++)
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.如 ...
- 剑指offer--11.数组中出现次数超过一半的数字
unique(), count()函数好用 ---------------------------------------------------------------------- 时间限制:1秒 ...
- 剑指Offer-28.数组中出现次数超过一半的数字(C++/Java)
题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.如 ...
- 1-剑指offer: 数组中出现次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- 剑指offer-数组中出现次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- 【剑指Offer】数组中出现次数超过一半的数字 解题报告(Python)
[剑指Offer]数组中出现次数超过一半的数字 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-inter ...
随机推荐
- Object与String
Object转为String的几种形式 在java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能.本文将对常用的转换方法进行一个总结.常用的方法有Object.toString ...
- 【ACM】懒省事的小明
懒省事的小明 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 小明很想吃果子,正好果园果子熟了.在果园里,小明已经将所有的果子打了下来,而且按果子的不同种 ...
- formatter easyui 重命名
function for_method(){ datagridmethod = $('#formethod_datagrid').datagrid({ url : 'loc ...
- MATLAB矩阵求值和稀疏矩阵
方阵的行列式: det(A) 矩阵线性无关的行数或列数,称为矩阵的秩. rank(A) 求3~20阶魔方矩阵的秩 for n=3:20 rank(magic(n)) end 矩阵的迹等于矩阵的对角线元 ...
- ubuntu14.04.2安装 YouCompleteme
1 安装git ,按照这篇文章安装 http://www.cnblogs.com/or2-/p/4350252.html 2 安装编译需要的各种包 sudo apt-get install build ...
- node搭环境(三)之安装vue-devtools
前面已经安装了bower gulp,马上要学vue了,今天安装vue及调试神器vue-devtools 安装步骤: 1.在GitHub上输入 github.com/vuejs/vue-devtool后 ...
- asp.net用zip方法批量导出txt
首先: 引用 ICSharpCode.SharpZipLib.dll,百度下载 然后引用命名空间: using ICSharpCode.SharpZipLib.Zip;using ICSharpCod ...
- 微信小程序全选多选效果
效果图: 代码: wxml <view class='hei_top'> <view class='hei_p'>共 <text>4</text> 场& ...
- Razor,aspx的占位控件(母版页)
1.razor: 母版页中:@*类似master的占位控件*@ @RenderSection("scripts", required: false) 部分页中: @section ...
- 浅谈SQL Server中的三种物理连接操作(Nested Loop Join、Merge Join、Hash Join)
简介 在SQL Server中,我们所常见的表与表之间的Inner Join,Outer Join都会被执行引擎根据所选的列,数据上是否有索引,所选数据的选择性转化为Loop Join,Merge J ...