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; } };