列表

详情


QQ2. 微信红包

描述

春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。

给定一个红包的金额数组 gifts 及它的大小 n ,请返回所求红包的金额。

若没有金额超过总数的一半,返回0。

数据范围: ,红包金额满足

示例1

输入:

[1,2,3,2,2],5

输出:

2

示例2

输入:

[1,1,2,2,3,3],6

输出:

0

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 2ms, 内存消耗: 348KB, 提交时间: 2017-07-30

class Gift {
public:
    int getValue(vector<int> gifts, int n) {
        // write code here
        int a[10000]={0};
        int i;
        int b=0;
        for(i=0;i<n;i++)
            a[gifts[i]]++;
        for(i=0;i<10000;i++)
            if(a[i]>(n/2))
            {
                b=i;
                break;
            }
        return b;
    }
};

Rust 解法, 执行用时: 3ms, 内存消耗: 400KB, 提交时间: 2022-01-25

struct Solution{

}

impl Solution {
    fn new() -> Self {
        Solution{}
    }

    /**
    * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
    *
    * 
        * @param gifts int整型一维数组 
        * @param n int整型 
        * @return int整型
    */
    pub fn getValue(&self, gifts: Vec<i32>, n: i32) -> i32 {
        use std::collections::BTreeMap;
        
        let mut map:BTreeMap<i32,i32> = BTreeMap::new();
        let len = gifts.len() as i32;
        for gift in gifts {
            match map.get_mut(&gift) {
                Some(e) => {
                    *e += 1;
                    if *e > len/2 {
                        return gift;
                    }
                },
                None => {
                    map.insert(gift, 1);}
            }
        }
        0
        // write code here
    }
}

C++ 解法, 执行用时: 3ms, 内存消耗: 412KB, 提交时间: 2021-09-25

class Gift {
public:
    int getValue(vector<int> gifts, int n) {
        if(n==0)
            return 0;
        int cnt=1,temp=gifts[0];
        for(int i=1;i<n;i++){
            if(gifts[i]==temp)
                cnt++;
            else{
                cnt--;
                if(cnt<0){
                    cnt=1;
                    temp=gifts[i];
                }
            }
        }
        cnt=0;
        for(int i=0;i<n;i++)
            if(gifts[i]==temp)
                cnt++;
        return cnt>n>>2?temp:0;
    }
};

C++ 解法, 执行用时: 3ms, 内存消耗: 416KB, 提交时间: 2021-09-18

class Gift {
public:
    int getValue(vector<int> gifts, int n) {
        // write code here
        if(n < 1){
            return 0;
        }
        
        int candidate = gifts[0];
        int currCnt = 0;
        
        for(int i = 0 ; i < n ; i ++ ){
            if(candidate == gifts[i]){
                currCnt ++;
            }else{
                currCnt --;
                if(currCnt < 0){
                    candidate = gifts[i];
                    currCnt = 0;
                }
            }
        }
        if(currCnt <= 0){
            return 0;
        }
        return candidate;
    }
};

C++ 解法, 执行用时: 3ms, 内存消耗: 416KB, 提交时间: 2021-09-01

class Gift {
public:
    int getValue(vector<int> gifts, int n) {
        // write code here
        int count = 0;
        int temp;
        for(int i = 0; i < n; i++){
            if(count==0){
                temp =  gifts[i];
                count = 1;
            }
            else{
                if(temp == gifts[i]){
                    count++;
                }
                else{
                    count--;
                }
            }
        }
        //检测temp出现的次数
        int size = 0;
        for(int i = 0; i < n; i++){
            if(temp == gifts[i]){
                size++;
            }
        }
        return (size > n/2) ? temp:0;
        
        
    }
};

上一题