- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
摩尔投票众数法,Boyer–Moore Majority Vote Algorithm,也被称作多数投票法,求解众数的算法(Majority Vote Algorithm),算法找出一个数组中超过一半的那个元素。
该算法特别适合流式数据计算环境(实时的流式大数据),某一个值是否超过总量的一半。该算法十分巧妙,时间复杂度为线性时间O(n),且不需要引入额外的空间复杂(例如最常规的hashmap之类,逐一记录每个元素出现的个数)。
public static void main(String[] args) {
int count = 10;
int[] data = dummy(count);
int major = majority(data);
System.out.println("结果:" + major);
}
// 制作测试数据。假设数据总数为count。
// 前一半-1(count/2 - 1)个数字是随机数,后一半+1个数字(count/2 +1)重复一个数字即众数。然后随机打乱这些数据。
// 如果刚好众数占一半,那么该算法并不总能工作良好,所以必须把众数多于一半。
public static int[] dummy(int count) {
int[] data = new int[count];
final int major = (int) (Math.random() * 100);
System.out.println("众数:" + major);
for (int i = 0; i < count; i++) {
if (i < (count / 2 - 1)) {
data[i] = (int) (Math.random() * 100);
} else {
data[i] = major;
}
}
//Java8以上
//int[]数组转为List<Integer>
List<Integer> list = Arrays.stream(data).boxed().collect(Collectors.toList());
System.out.print("原数据:");
System.out.print(list);
Collections.shuffle(list);
System.out.print("\n打乱后:");
System.out.println(list);
//Java8以上
//再将List<Integer>转为普通的int[]数组
int[] intArr = list.stream().mapToInt(Integer::intValue).toArray();
return intArr;
}
// 众数的核心执行算法。
// 传入一个数组,最终返回该数组中的众数。
public static int majority(int[] nums) {
//初始化,假设数组中第一个数即为众数
int major = -1;
int count = 0;
for (int i = 0; i < nums.length; i++) {
if (count == 0) {
major = nums[i];
count = 1;
} else {
if (major == nums[i]) {
count++;
} else {
count--;
}
}
}
//统计最终获得的众数major,是否真的超过一半?
int cnt = 0;
for (int n : nums) {
if (n == major) {
cnt++;
}
}
if (cnt > nums.length / 2) {
//正常
} else {
major = -1;//原数据异常,没有数超过总量的一半。
}
return major;
}
测试输出:
众数:99
原数据:[31, 75, 40, 49, 99, 99, 99, 99, 99, 99]
打乱后:[40, 99, 99, 99, 31, 75, 99, 99, 99, 49]
结果:99
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
我有实体: @Entity @Table(name = "CARDS") public class Card { @ManyToOne @JoinColumn(name = "PERSON_I
我正在尝试计算二维多边形的表面法线。我正在使用 OpenGL wiki 中的 Newell 方法来计算表面法线。 https://www.opengl.org/wiki/Calculating_a_S
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 7 年前。 Improve
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我这里有以下 XML: Visa, Mastercard, , , , 0, Discover, American Express siteonly, Buyer Pay
即将发生的 Google 政策变更迫使我们实现一个对话框,以通知欧盟用户有关 Cookie/设备标识符用于广告和分析的情况。我只想向欧盟用户显示此对话框。我不想使用额外的权限(例如 android.p
本文分享自华为云社区《华为大咖说 | 企业应用AI大模型的“道、法、术” ——道:认知篇》,作者:华为云PaaS服务小智。 本期核心观点 上车:AGI是未来5~10年内,每个人都无法回避的技
我有一个与酒精相关的网站,需要先验证年龄,然后才能让他们进入该网站。我使用 HttpModule 来执行此操作,该模块检查 cookie,如果未设置,我会将它们重定向到验证页面。我验证他们的年龄并存储
在欧盟,我们有一项法律,要求网页请求存储 cookie 的许可。我们大多数人都了解 cookie 并同意它们,但仍然被迫在任何地方明确接受它们。所以我计划编写这个附加组件(ff & chrome),它
以下在 C 和/或 C++ 中是否合法? void fn(); inline void fn() { /*Do something here*/ } 让我担心的是,第一个声明看起来暗示函数将被定义
我是一名优秀的程序员,十分优秀!