数组中有一个数字出现的次数超过了数组长度的一半,找出这个数
2015-12-15 16:15
597 查看
在这里我做一下简单的分析。
这个算法的时间复杂度是O(n),另外用了两个辅助变量。
k用于临时存储数组中的数据,j用于存储某个数出现的次数。
开始时k存储数组中的第一个数,j为0,如果数组出现的数于k相等,则j加1,否则就减1,如果j为0,就把当前数组中的数赋给k
因为指定的数出现的次数大于数组长度的一半,所有j++与j--相抵消之后,最后j的值是大于等于1的,k中存的那个数就是出现最多的那个数。
下面这个算法只适合数组中数组中某个数的出现次数超过数组长度一半的数组,符合题意。
package com.abin.lee.forge.client;
/**
* Description:
* Author: abin
* Update: (2015-12-15 15:40)
*/
public class Half {
public static void main(String[] args) {
int[] input = new int[]{1,2,3,4,5,3,3,3,3};
int result = get(input);
System.out.println("result="+result);
}
public static int get(int[] input){
Integer temp = 0;
Integer count = 0;
for(int i=0;i<input.length;i++){
if(count == 0)
temp = input[i];
if(temp == input[i])
++count;
else
--count;
}
return temp;
}
}
这个算法的时间复杂度是O(n),另外用了两个辅助变量。
k用于临时存储数组中的数据,j用于存储某个数出现的次数。
开始时k存储数组中的第一个数,j为0,如果数组出现的数于k相等,则j加1,否则就减1,如果j为0,就把当前数组中的数赋给k
因为指定的数出现的次数大于数组长度的一半,所有j++与j--相抵消之后,最后j的值是大于等于1的,k中存的那个数就是出现最多的那个数。
下面这个算法只适合数组中数组中某个数的出现次数超过数组长度一半的数组,符合题意。
package com.abin.lee.forge.client;
/**
* Description:
* Author: abin
* Update: (2015-12-15 15:40)
*/
public class Half {
public static void main(String[] args) {
int[] input = new int[]{1,2,3,4,5,3,3,3,3};
int result = get(input);
System.out.println("result="+result);
}
public static int get(int[] input){
Integer temp = 0;
Integer count = 0;
for(int i=0;i<input.length;i++){
if(count == 0)
temp = input[i];
if(temp == input[i])
++count;
else
--count;
}
return temp;
}
}
相关文章推荐
- 单臂路由的配置
- mysql 数据类型大全
- iOS 关于设置UIView的autoresizingMask没有作用的问题
- Java中重定向与请求转发的区别
- linux shell脚本增加#!/bin/sh导致的问题
- swift学习记录(元组tuples)
- Hive介绍
- js深入研究之类定义与使用
- 轻量级的内部测试过程r \\ u0026研发团队
- iOS 自动布局
- 搜索专题的一些记录
- Stack Overflow:iOS how to use UIAlertView
- MFEXE.COM论坛开源
- JS事件处理
- 面试题13:数值的整数次方(offer)
- OpenResty(nginx扩展)整合HttpGuard学习与安装配置
- tableview组的尾视图高度
- MySQL开启general_log
- 设置键盘只能输入数字和字母--密码键盘
- JS事件处理