题解 | #微信红包#

微信红包

https://www.nowcoder.com/practice/fbcf95ed620f42a88be24eb2cd57ec54

import java.util.*;

public class Gift {public int getValue(int[] gifts, int n) {if (n == 0) return 0; // 如果数组为空,返回0

import java.util.*;

public class Gift {
    public int getValue(int[] gifts, int n) {
        if (n == 0) return 0; // 如果数组为空,返回0

        int candidate = gifts[0]; // 初始化候选者为数组的第一个元素
        int count = 1; // 初始化计数器为1

        for (int i = 1; i < n; i++) {
            if (gifts[i] == candidate) {
                count++; // 如果当前元素与候选者相同,计数器加1
            } else if (count == 0) {
                candidate =
                    gifts[i]; // 如果计数器为0,选择当前元素为新的候选者
                count = 1; // 重置计数器为1
            } else {
                count--; // 如果当前元素与候选者不同,计数器减1
            }
        }

        // 检查候选者是否真的是出现次数超过一半的元素
        count = 0;
        for (int i = 0; i < n; i++) {
            if (gifts[i] == candidate) {
                count++;
            }
        }

        // 如果候选者的出现次数超过一半,则返回它;否则返回0
        return count > n / 2 ? candidate : 0;
    }
}

}

全部评论

相关推荐

牛客175617325号:有的面试官不开摄像头 可能是因为他是竞业来的
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务