Majority Element
来源:互联网 发布:广州网络编辑有限公司 编辑:程序博客网 时间:2024/06/05 16:58
原题描述
Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋
times.
You may assume that the array is non-empty and the majority element always exist in the array.
刚开始的想法
想着复制数组与每一个对应元素作差,重复最多的数组得到的零最多,于是用减后的绝对值求和最小值来判断。
这个思路有几个问题:
第一,即使实现了,就算是对的,复杂的非常高
第二,作差后得到的零最多,不代表求和就最小
第三,这种方法只能找出相对来说多的,而没有切合到more than n/2这个题设,相当于自己扩大问题,必然复杂度变高
public class Solution { public int majorityElement(int[] nums) { int[] dup = new int[nums.length]; int sum = 0; int min = 100000; int index = 0; for(int i = 0;i < nums.length;i++){ for(int k = 0;k < nums.length;k++){ dup[k] = nums[k]; } for(int j = 0;j < nums.length;j++){ dup[j] -= nums[i]; sum += Math.abs(dup[j]); } System.out.println("sum:-->"+sum); if(sum <= min){ min = sum; index = i; } sum = 0;//用于本轮计数的注意清零 } return nums[index]; }}
正确的思路(转自http://www.cnblogs.com/fanyabo/p/4178993.html)
1.思路1:Moore voting algorithm--每找出两个不同的element,就成对删除即count--,最终剩下的一定就是所求的。时间复杂度:O(n) 从头到尾遍历,用一个cn=1记录,下一个数与上一个数一样的时候cn++,不一样就cn--,cn为0的时候换值
2.思路2:随机挑选一个元素,检查是否是多数元素。时间复杂度:Average:O(n)。期望查找次数 <2,因为目标过半
阅读全文
0 0
- majority element
- Majority Element
- Majority Element
- Majority Element
- Majority Element
- Majority Element
- Majority Element
- Majority Element
- Majority Element
- Majority Element
- Majority Element
- Majority Element
- Majority Element
- Majority Element
- Majority Element
- majority element
- Majority Element
- Majority Element
- Map四种遍历方式
- 进制转换
- Mac Iterm2 上配置类似于 SecureCRT 中的克隆对话 (clone session) 功能
- Java关于File文件类操作总结
- es学习笔记二---ElasticSearch5.x 在远程Linux6.5服务器上搭建单个节点
- Majority Element
- 九度OJ 1070:今年的第几天?
- 线性回归小程序举例,梯度下降法
- HDU 1695 GCD(容斥定理)
- windows下 appium遇到的问题(android)
- 为什么如此获取Java数组的长度
- logback 日志文件配置
- java基础:关于遍历 -- for 、foreach 和 Iterator
- maven 手动安装本地jar包