leetcode169——多数元素【投票算法】

这篇博客介绍了如何解决LeetCode第169题——多数元素的问题,主要探讨了四种不同的方法:排序、随机化、分治以及Boyer-Moore投票算法。Boyer-Moore投票算法中,通过候选众数candidate和计数器count,利用count=0作为分界线,保证了数组右端部分的众数不变,从而逐步筛选出真正的多数元素。
摘要由CSDN通过智能技术生成

一.C

先排序,下标为 [ n / 2 ] 的元素一定是众数

int Cmp_int(const void* p1, const void* p2)
{
	return *(int*)p1 - *(int*)p2;
}

int majorityElement(int* nums, int numsSize) 
{
	qsort(nums, numsSize, sizeof(int), Cmp_int);
	return nums[numsSize / 2];
}

java

/*
s.sort(int[] a):从小到大排序
s.sort(int[] a, int fromIndex, int toIndex):对数组a的下标从fromIndex到toIndex-1的元素排序
*/

class Solution 
{
    public int majorityElement(int[] nums) 
    {
        Arrays.sort(nums);
        return nums[nums.length / 2];
    }
}

二.随机化

class Solution 
{
    private int randRange(Random rand, int min, int max) 
    {
        return rand.nextInt(max - min) + min;   //生成一个范围在0~x(不包含X)内的任意正整数
    }

    private int countOccurences(int[] nums, int num)   //数组里有几个和num相等的数字
    {
        int count = 0;
        for (int i = 0; i &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值