`

帮忙分析一个算法。

    博客分类:
  • java
阅读更多

一个含N个整数的数组,其中一个元素出现次数 k>N/2,找出这个元素。限O(N)时间,O(1)空间。其实就是找数组中出现次数最多的那个元素,看到一篇帖子,调试了一把发现有问题,

http://hi.baidu.com/wzfxyer/blog/item/a16bec99e6b7700f6f068c69.html
public class FindKinN {
    public static void main(String[] args) {

        int[] a = {1,1,1,1,2,2,1,1,2,2,2,1};
        int count,cur,n;
        
         count = 0;
         cur = 0;
         n = a.length;
        for (int i = 0; i < n; i++)
        {
            if (count == 0) cur = a[i];
            if (cur == a[i]) 
                 count++;
            else
                 count--;
            
         }
        
         System.out.println("你要找的是:" + cur);
     }

}
//适用范围:必须有支配者,而且必须大于n/2。

调试了一把,发现算法有问题,修改如下:
public class FindKinN {
	public static void main(String[] args) {

		int[] a = { 4, 3, -1, 3, 4, 3, 5 };
		int count, cur, n;

		count = 0;
		cur = a[0];
		n = a.length;
		for (int i = 0; i < n; i++) {
			if (cur == a[i])
				count++;
			else {
				count--;
				if (count == 0){
					cur = a[i];
				}
			}

		}
		System.out.println("你要找的是:" + cur);
	}

}


到底对不对心里没有底,请高手帮忙分析一下。



我也感觉不对,因为我想在count--之后才能变成0,故可能前面不用判断了,我再加上,再看看有什么问题。


public class FindKinN {
	public static void main(String[] args) {

		int[] a = {4,3,-1,3,4,3,5,4,4,4,4,4,4};
		int count, cur, n;

		count = 0;
		cur = a[0];
		n = a.length;
		for (int i = 0; i < n; i++) {
			if (count == 0){
				cur = a[i];
			}
			if (cur == a[i])
				count++;
			else {
				count--;
				if (count == 0){
					cur = a[i];
				}
			}

		}
		System.out.println("你要找的是:" + cur);
	}

}


我实现了一个很笨的算法,无论是时间复杂度还是空间复杂度都超了,希望谁给我改正一下:

import java.util.HashMap;
import java.util.Map;

public class FindKinN {
	public static void main(String[] args) {
		 int[] array = {3,4,3,2,-1,3,3};  
		 System.out.println(search(array));
	}
	public static int search(int[] array){
		Map<Integer,Integer> map  = new HashMap<Integer,Integer>();
		for(int i =0; i < array.length; i++){
			Integer value = map.get(array[i]);
			if(value == null){
				map.put(array[i], 1);
			} else {
				map.put(array[i], value + 1);
			}
		}
		int maxValue = -1;
		int maxKey = -1;
		for(Map.Entry<Integer, Integer> entry : map.entrySet()){
			int nextValue = entry.getValue();
			if(nextValue > maxValue){
				maxValue = nextValue;
				maxKey = entry.getKey();
			}
		}
		return maxKey;
	}
}


分享到:
评论
2 楼 asialee 2009-03-17  
nerain 写道

你修改之后的:
int[] a = {4,3,-1,3,4,3,5,4,4,4,4,4,4}; 的话就不对了



我修改之后的代码不知道对不对,我已经不知道我的代码是干什么的了。
请帮忙分析一下。
1 楼 nerain 2009-03-17  
你修改之后的:
int[] a = {4,3,-1,3,4,3,5,4,4,4,4,4,4}; 的话就不对了

相关推荐

    算法导论中文版

    《算法导论》是一本深度探讨计算机算法的权威著作,对于理解、设计和分析算法具有极其重要的指导价值。这本书深入浅出地介绍了各种基础和高级算法,是许多计算机科学专业学生以及软件工程师的重要参考书。中文版的...

    QQ农场分析+代码+VC++.rar

    这东西是以前觉得QQ农场比较有意思的时候写的,后来还让我同学帮忙分析分析数据, 结果后来太忙了,就一直荒废着,一直荒废到现在连QQ农场都快遗忘了 , 现在将我的分析与源代码 (VC++ 6.0) 发出来,有兴趣可以拿去...

    GPS时钟程序+仿拼多多砍价算法.zip

    仿制这种算法,意味着我们要创建一个类似的计算模型,它可能涉及到概率计算、动态定价和用户行为分析。 标签中的“GPS时钟程序”再次强调了时间同步的重要性,而“仿拼多多砍价算法”则提示我们将讨论一种与社交...

    马云喊我来帮忙_电商数据可视化系统_冯微伟1

    【电商数据可视化系统】是一个专为电商商户设计的分析工具,它通过数据可视化技术帮助商家理解和解析商品销售、用户行为等关键数据。该系统由【浙江大学软件学院】开发,项目名为“马云喊我来帮忙”,在天池平台的...

    主要是机器学习、深度学习等模型的比赛,领域包括数据挖掘、NLP、CV等方向,需求CV方向同学帮忙一同贡献.zip

    机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。它专门研究计算机如何模拟或实现人类的学习行为,以获取新的知识或技能,并重新组织已有的知识结构,从而不断改善...

    java设计模式

    策略模式定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式让算法的变化独立于使用算法的客户。 **应用场景:** - 当一组算法中的每一个都需要被单独封装时; - 当一个对象的行为可以通过...

    易语言-贝店砍价abr算法

    - 它可能会设定一个最低价和最高价范围,确保砍价活动在可控范围内进行,同时保持吸引力。 - 算法还会考虑防止恶意刷价,确保活动公平性。 3. **源码解析**: - 源码中可能包含数据结构的设计,如用户信息、商品...

    小渊和小轩、辰辰的梦想等OJ题目分析及源码

    在这个问题中,小渊和小轩位于一个m行n列的矩阵的对角线上,希望通过其他同学的帮助传递纸条,而且希望找好心程度最高的同学帮忙。每个同学只能帮忙一次,即要么帮助纸条从小渊到小轩,要么帮助纸条从小轩回小渊。...

    24个设计模式与6大设计原则

    策略模式定义了一系列的算法,并将每一个算法封装起来,使它们可以相互替换。该模式让算法的变化独立于使用算法的客户。例如,在“三国”场景中,诸葛亮给赵云提供了三个锦囊妙计,这些妙计可以根据实际情况来选择...

    graphics-algorithm:3D图形学算法代码。包括软渲染,光线追踪,PBR等〜

    我的联系方式是 ,如果对您有帮助还请帮忙点一个star。记录图形学开发内容,学习过程中的总结仓库: : 下载单一项目代码 GitZip for github插件的Chrome安装GitZip for github ,双击单个目录即下载。(每个项目一个...

    2020-12th-ironman:[全民疯AI系列] 第12届iT邦帮忙铁人赛影片教学组

    此外每一个演算法中附带程式教学,大家可以透过手把手实作,不仅能够了解演算法概念,同时也能了解程式实作技巧。此系列将以影片教学方式呈现,未来也会陆续将此系列内容整理成电子书贡献给大家,希望这30天的教学中...

    ASP基于RSA的数字签名的设计与实现(源代码+论文)_new.rar

    一类资源描述:Java ASP系统毕业设计资源 1. 概述:该资源集中于Java与ASP结合的Web系统毕业设计。对于学生而言,它提供了从初步的构想到实际开发所需的全方位辅助材料,包括论文、设计文档和源代码等。 2. 包含内容...

    基于Python的天气预测和可视化

    7. **部署**:项目的开发者提到可以在CSDN上帮忙部署,这意味着他们将协助把整个系统部署到一个在线平台,使其能够在互联网上运行,为用户提供实时访问和查询天气预测的服务。 通过这些关键技术,我们可以看到这个...

    请教MATLAB的图象多重分形程序-multifractal.m

     最近在做图象多重分形的分析,在MATHWORKS上找到一个国外程序,可以做.但是分 析的结果有点问题,a-f图的fmax大于2.另外,在运行的时候,会提示错误Size vector should be a row vector with integer elements, ...

Global site tag (gtag.js) - Google Analytics