剑指offer 29 数组中出现次数超过一半的数字
来源:互联网 发布:淘宝网1 8米纯棉床罩 编辑:程序博客网 时间:2024/06/11 19:09
题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
思路
- 如果某个数符合条件,它一定是中位数。因此,找出中位数。
- 如果一个数num,左边比它小,右边比它大,它的下标是index。如果index < middle,那么中位数在它右边,反之,中位数在它左边。
- 通过partition,下标为middle的值,它就是中位数。
- 根据中位数,判断是否符合条件。
代码
# -*- coding:utf-8 -*-class Solution: def MoreThanHalfNum_Solution(self, numbers): # write code here middle = int(len(numbers) / 2) start = 0 end = len(numbers) - 1 index = self.partition(numbers, start, end) while index != middle: if index < middle: start = index + 1 index = self.partition(numbers, start, end) elif index > middle: end = index - 1 index = self.partition(numbers, start, end) num = numbers[middle] count = 0 for tmp in numbers: if tmp == num: count += 1 if count > middle: return num return 0 def partition(self, numbers, start, end): key = numbers[start] s = start e = end while s < e: while numbers[e] >= key and s < e: e -= 1 while numbers[s] <= key and s < e: s += 1 if s < e: numbers[s], numbers[e] = numbers[e], numbers[s] numbers[start], numbers[s] = numbers[s], numbers[start] return s
阅读全文
0 0
- 剑指offer--数组中出现次数超过一半的数字
- 《剑指offer》数组中出现次数超过一半的数字
- 剑指offer:数组中出现次数超过一半的数字
- 【剑指Offer】数组中出现次数超过一半的数字
- 剑指offer:数组中出现次数超过一半的数字
- 数组中出现次数超过一半的数字||剑指offer
- 剑指offer 数组中出现次数超过一半的数字
- 剑指offer:数组中出现次数超过一半的数字
- [剑指offer]数组中出现次数超过一半的数字
- 《剑指offer》-数组中出现次数超过一半的数字
- 剑指offer|数组中出现次数超过一半的数字
- 剑指offer-数组中出现次数超过一半的数字
- 《剑指offer》数组中出现次数超过一半的数字
- 剑指offer - 数组中出现次数超过一半的数字
- 剑指Offer:数组中出现次数超过一半的数字
- 剑指offer-数组中出现次数超过一半的数字
- 剑指offer:数组中出现次数超过一半的数字
- 剑指offer 数组中出现次数超过一半的数字
- PAT——1021. 个位数统计
- 企业号开发者接口文档
- 为CentOS 6 配置本地YUM源
- selenium详解(一)
- Java通过反射得到属性的值和设置属性的值
- 剑指offer 29 数组中出现次数超过一半的数字
- spring集成redis
- Java设计模式_(创建型)_原型模式
- 微擎0.7功能解析:性能优化、读写分离、负载均衡、附件分离
- c++ 11 tuple实现
- java代码参考规范
- I2C
- HashMap全解析
- Python与设计模式(一)——Abstract Factory