zoukankan      html  css  js  c++  java
  • 如何高效地抽离出两个数组中的相同元素

    近期在面试时候遇到这么一道题目:比较两个存在大量元素的数组,抽离出他们的相同项。

    当时我脑中想到的办法是把一个数组中的元素逐个地去另一个数组中查找,但是此办法效率不高,下面给出测试代码,arry1和arry2各有一万个元素:

    private function loopCompare():void
    {
    	var startTime:int = getTimer();
    	var commonValue:Array = [];
    	var currentValue:int;
    	var index:int;
    	for(var i:int=0; i<elementCount; i++)
    	{
    		currentValue = arry1[i];
    		index = arry2.indexOf(currentValue);
    		if( index != -1 )
    		{
    			commonValue.push(currentValue);
    		}
    	}
    	trace("common count:" + commonValue.length.toString());
    	trace("time cost:" + (getTimer() - startTime).toString() + "ms");
    }

     之后,通过Google之后我发现了另一种办法:字典查找法,给予了我满意的效率,下面给出测试代码:

    private function ObjectCompare():void
    {
    	var startTime:int = getTimer();
    	var commonValue:Array = [];
    	var obj:Object = {};
    	for each(var elem:int in arry1)
    	{
    		obj[elem] = true;
    	}
    	
    	for each(elem in arry2)
    	{
    		if( obj[elem] )
    		{
    			commonValue.push(elem);
    			delete obj[elem];
    		}
    	}
    	
    	trace("common count:" + commonValue.length.toString());
    	trace("time cost:" + (getTimer() - startTime).toString() + "ms");
    }

     这个故事告诉我们,在比较数据方面,关联数组的效率要远大于一般数组。经测试,比较一万个元素,使用一般数组需要耗时677ms,而关联数组仅耗时10ms

  • 相关阅读:
    lines-HDU5124(区间处理 +离散化)
    Reorder the Books-HDU5500
    Bad Hair Day-POJ3250(简单的入栈出栈)
    Count the Colors-ZOJ1610(线段树区间求)
    Just a Hook-HDU1698(线段树求区间)
    Mayor's posters-POJ2528(线段树+离散化)
    A Simple Problem with Integers-POJ3468
    Strongly connected-HDU4635
    Caocao's Bridges-HDU4738(Tarjin+求桥)
    Warm up-HUD4612(树的直径+Tarjin缩点)
  • 原文地址:https://www.cnblogs.com/chenhongyu/p/3477173.html
Copyright © 2011-2022 走看看