[LeetCode169]Majority Element求一个数组中出现次数大于n/2的数

题目:

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.

思路:可以利用Dictionary将数组中每个数出现的次数记录下来,输出出现次数大于n/2的数

  或者 将数组排序后,数组中间的数即为所求

代码:

public class Solution {
    public int MajorityElement(int[] nums) {
        int time = nums.Length / 2;
        /*利用Dictionary
        Dictionary<int,int> dic = new Dictionary<int,int>();
        for(int i = 0;i < nums.Length;i++)
        {
            if(!dic.ContainsKey(nums[i]))
                dic.Add(nums[i],0);
        }
        for(int j = 0;j < nums.Length;j++)
        {
            if(dic.ContainsKey(nums[j]))
            {
                dic[nums[j]]++;
                if(dic[nums[j]] > time)
                    return nums[j];
            }
        }
        return 0;
        */

        //将数组排序,中间的数字即为所求
        Array.Sort(nums);
        return nums[time];
    }
}

    

时间: 2024-10-15 08:28:39

[LeetCode169]Majority Element求一个数组中出现次数大于n/2的数的相关文章

巧妙利用快速排序法的原理求一个数组中的第10大元素

//快速排序法 int QuickSort_process3(int *a, int low, int high) { int l, h, temp; l = low; h = high; temp = a[low]; while (l < h){ while (l< h&&a[h] >= temp) --h; if (l < h) a[l] = a[h]; while (l < h&&a[l] < temp) ++l; if (l &l

软件工程结对开发之求一个数组中连续最大子数组之和

一.团队成员: 檀威,陈志利 二.项目名: 求一个数组中连续最大子数组之和 三.我们的设计思路: 设sum[i]为以第i个元素结尾且和最大的连续子数组.对于元素i,所有以它前面的元素结尾的子数组的长度都已经求得,那么以第i个元素结尾且它们之和最大的连续子数组要么是以第i-1个元素结尾且它们之和最大的连续子数组加上这个元素,要么是只包含第i个元素,即sum[i] = max(sum[i-1] + arr[i], arr[i]).可以通过判断sum[i-1] + arr[i]是否大于arr[i]来做

求一个数组中只出现一次的数字

/* 求一个数组中只出现一次的数字(注:只针对数组中有两个数不同,且其他数字两两相同) 题目:一个整型数组里除了两个数字出现一次外,其他的数字都出现了两次:求出现一次的数字: 如:数组a[]={2,4,3,6,3,2,5,5};执行程序后应输出4和6:因为4,6只在该数组中出现了一次 思路:两个数字相同其异或结果一定为0,先异或->再分组-->再对每个子序列异或 算法: 1. 先对数组的每一个元素进行异或操作,求结果(本质就是对那两个不同的数的异或,即4^6=0010) 2.根据异或的操作结果

求一个数组中最大连续子序列的和

10.求一个数组中最大连续子序列的和 参考链接:http://blog.csdn.net/butwang/article/details/4691974 思路:如果已经知道在前0~k-1共k个元素中,在最大和为MaxAll[k-1], 怎么求0~k共k+1个元素的MaxAll[k]. 如果前k个元素的最大和子序列包括a[k-1],则很容易知道MaxAll[k] = max(MaxAll[k-1] + a[k], a[k]).那如果前k个元素的最大和子序列不包括a[k-1]呢?在数组后面增加一个元

1152: 零起点学算法59——找出一个数组中出现次数最多的那个元素

1152: 零起点学算法59--找出一个数组中出现次数最多的那个元素 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 990  Accepted: 532[Submit][Status][Web Board] Description 找出一个数组中出现次数最多的那个元素 Input 第一行输入一个整数n(不大于20) 第二行输入n个整数 多组数据 Output 找出n个整数中出现次数最多的那个整数(

算法之找出数组中出现次数大于n/m的元素

最经典的题目莫过于是: 在一个数组中找出出现次数超过n/2的元素?更进一步的,找出数组中出现次数大于n/3的所有元素? 注:这里有一个很重要的事实,那就是出现次数大于n/m的元素的个数至多为(m-1)个,比如出现次数大于n/3的至多只有两个. 关于这一类题目的解题思路,可以先讲一个游戏 称作 "俄罗斯方块".这里的规则是每一行的元素要完全不一样,一样的元素则总是在同一列,如果最下面的行已经被填满,那么消除最下面的行. 例如在数组 A = {7,3,3,7,4,3,4,7,3,4,3,4

“支配着” 是在数组中出现频率超过一半的整数,求一个数组中的支配者

"支配着" 是在数组中出现频率超过一半的整数,例如{3, 2, 3, 3, 0, 2, 3, 4, 3},其中3出现5次,5除以9大于0.5,所以3是支配者.写一个函数,在给定的整数数组中找出支配者是多少,如果一个数组中没有支配者,则返回1. package cn.usst.DataTest5; import java.util.Arrays; public class DataTest5 { /** * "支配着" 是在数组中出现频率超过一半的整数 * @para

算法学习(十一)数组中出现次数超过长度一半的数

数组中出现次数超过数组长度一半的 数字 题目描述: 给定 一个数组,找到数组中出现次数超过数组长度一半的数字,如数组 a[]= {0,1,2,1,1},输出为1 分析: 1,可以使用伴随数组b,遍历数组a,将值作为数组b的下标,将次数作为值,然后遍历数组b,找到次数超过一半的值,然后输出.时间复杂度为O(N),不过要增加空间复杂度. 2,我们可以先对数组进行排序,因为某个数字出现次数超过一半,所以在数组的N/2处,就一定是那个数字.时间复杂主要为排序的时间,使用快排O (N*logN). 3,有

求一个数组中a[0...i-1] 离a[i]最接近的值

博客主页:http://blog.csdn.net/minna_d 题目: 给一个n个元素的线性表A,对于每个数Ai,找到它之前的数中,和它最接近的数.即对于每个i,计算 Ci = min{|Ai-Aj| | 1<=j<i} 规定C1 = 0. 其实就是给定一个数组, 在a[0....i-1]中求离a[i]最近的值, 其实这里有个bug,那就是,如果对与6而言5,7都离它一样, 那么该输出谁呢 N久不写C, 感觉怪怪的, 写了一个java版. 思路: 用一个临时数组存储,离a[i]最近值 用另