主元素I
来源:互联网 发布:ps是什么软件 编辑:程序博客网 时间:2024/06/01 08:03
给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。
注意事项
You may assume that the array is non-empty and the majority number always exist in the array.
样例
给出数组[1,1,1,1,2,2,2],返回 1
这里给出了3种方法
import java.util.ArrayList;import java.util.HashMap;import java.util.Map.Entry;import java.util.Scanner;/** * 主元素 给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。 注意事项You may assume that the array is non-empty and the majority number always exist in the array.样例给出数组[1,1,1,1,2,2,2],返回 1 * * @author Dell * */public class Test46 { public static int majorityNumber1(ArrayList<Integer> nums) { int result=-1; HashMap<Integer,Integer> map=new HashMap<>(); for(int i=0;i<nums.size();i++) { if(!map.containsKey(nums.get(i))) { map.put(nums.get(i), 1); } else { map.put(nums.get(i),map.get(nums.get(i))+1); } } for(Entry<Integer,Integer> e : map.entrySet()) { if(e.getValue()>(nums.size()/2)) { result=e.getKey(); break; } }return result; } public static int partition(ArrayList<Integer> nums, int start, int end) { int i=start; int j=end; int temp=nums.get(start); while(i<j) { while(i<j&&nums.get(j)>temp) j--; if(i<j) { nums.set(i, nums.get(j)); i++; } while(i<j&&nums.get(i)<temp) i++; if(i<j) { nums.set(j, nums.get(i)); j--; } } nums.set(i, temp); return i; } public static int majorityNumber2(ArrayList<Integer> nums) { int start=0; int end=nums.size()-1; int index=partition(nums,start,end); int mid=nums.size()/2; while(index!=mid) { if(index>mid) { end=index-1; index=partition(nums,start,end); } else { start=index+1; index=partition(nums,start,end); } } return nums.get(index); } public static int majorityNumber3(ArrayList<Integer> nums) { int result=nums.get(0); int times=1; for(int i=1;i<nums.size();i++) { if(times==0) { result=nums.get(i); times=1; } else if(nums.get(i)==result) times++; else if(nums.get(i)!=result) { times--; } } return result; }public static void main(String[] args) {Scanner sc=new Scanner(System.in);int n=sc.nextInt(); ArrayList<Integer> list=new ArrayList<>(); for(int i=0;i<n;i++){list.add(sc.nextInt());} System.out.println(majorityNumber3(list)); }}
阅读全文
0 0
- 主元素I
- 第i小元素
- 快排求第i小元素
- 查找第i个元素
- 求第i小的元素
- 搜索第i个元素的地址
- 获得ArrayList的第i个元素
- 【算法导论】第i小的元素
- 查找第i小的元素
- 算导 快速选择第i小元素
- 选择第i小的元素
- 求第i小的元素
- Lazyload (I ) 元素尺寸位置等概念
- 两个元素的快排 NDU.i
- 删除链表中的重复元素I
- 寻找数组中的第i小元素
- 随机选择第i小元素
- html5中的b元素与strong元素,i元素和em元素有什么区别
- C/C++UDP套接字之一般流程
- 91-95.c个人练习。
- USACO之Prime Cryptarithm
- Vue jquery.masonry 滑动自动加载 瀑布流
- C#文本框的KeyPress事件对键盘输入进行限制
- 主元素I
- 23.6 23.7 Web environment Web环境变量读取
- JavaMail笔记
- 通过NFS方式进行源码级别的共享进行多台机器间的部署。
- Initialization error Could not load "D:\install\PLSQL\instantclient_11_2\oci
- 用递归方法解析XML
- 天猫页面之一(公共页面)
- bzoj 4653: [Noi2016]区间 (线段树)
- 六款值得推荐的android(安卓)开源框架简介