【原创】判断数组元素是否存在重复,要求时间复杂度为O(n)

Junglesong 发表于 2008-06-11 21:43:05

下面的代码涉及判断数组元素是否存在重复,要求时间复杂度为O(n)。
这样的题肯定不能用双循环比较,这样太慢,用hashcode判断是正道,使用现成的hashset更能简化代码。

代码如下:
package com.sitinspring;

import java.util.HashSet;
import java.util.Set;

/**
 * 数组重复测试,要求时间复杂度为O(n)
 * 
@author sitinspring(junglesong@gmail.com)
 * 
@since 2008-6-11 上午11:12:53
 * @vsersion 1.00 创建 sitinspring 2008-6-11 上午11:12:53
 
*/

public class ArrayDuplicateTest{
    
/**
     * 构造函数
     *
     
*/

    
public ArrayDuplicateTest(int[] arr){
        System.out.print(
"数组:");
        
for(int temp:arr){
            System.out.print(temp
+",");
        }

        
        
if(hasDuplicateItem(arr)==false){
            System.out.println(
"无重复结果");
        }

        
else{
            System.out.println(
"有重复结果");
        }

    }

    
    
/**
     * 取得检测结果
     * 
@param arr
     * 
@return
     
*/

    
private boolean hasDuplicateItem(int[] arr){
        Set
<Integer> set=new HashSet<Integer>();
        
        
for(int i:arr){
            
if(!set.add(i)){
                
return true;
            }

        }

        
        
return false;
    }

    
    
public static void main(String[] args){
        
int[] arr1={1,2,3,4,5};
        
new ArrayDuplicateTest(arr1);
        
        
int[] arr2={1,2,3,4,5,5,53,43,42,2,454,6,5456,4534,4};
        
new ArrayDuplicateTest(arr2);
        
        
int[] arr3={1,2,3,4,5,767,4332,534,76,6583,356};
        
new ArrayDuplicateTest(arr3);
    }

}

输出:
数组:1,2,3,4,5,无重复结果
数组:
1,2,3,4,5,5,53,43,42,2,454,6,5456,4534,4,有重复结果
数组:
1,2,3,4,5,767,4332,534,76,6583,356,无重复结果
收藏: QQ书签 del.icio.us 订阅: Google 抓虾

最新评论

发表评论

* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 
 

分类小组论坛
杂谈, 娱乐、八卦, 文学、艺术, 体育, 旅游、同城, 象牙塔, 情感, 时尚、生活, 星座, 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定