百科问答小站 logo
百科问答小站 font logo



C#中关于List<T>和HashSet<T>应用的效率问题? 第1页

  

user avatar   oahzir 网友的相关建议: 
      

这是two sum那道题吧。

很明显用了hash table来储存数据,是为了用O(n)的space来换取O(n)的时间,也就是查找元素的时间是O(1)。

你这样用List,contains查找时间还是O(n)。

跟你直接写个for loop用brute force有什么区别呢?


user avatar   wizardforcel 网友的相关建议: 
      

如果拆开来看,List<T>里面是线序集,HashSet<T>里面是散列表。

与Dictionary<K,V>相比,List<T>可以看成下标到值的映射,HashSet<T>可以看成值自己到自己的映射。判断一个值是否存在,前者相当于是用值去找下标,要遍历一遍容器;后者相当于用映射前的值去找映射后的值,只需要计算出来值的hash,然后直接访问就好了。


user avatar   Ivony 网友的相关建议: 
      

简单说,一个时间复杂度O(1),一个时间复杂度O(n)。

而且HashSet无序不重,和List完全不同。


判断一个数组是否包含重复元素,其实只需要一个个添加到HashSet,然后检查Add方法的返回值就可以了:

       var set = new HashSet<int>(); foreach( var i in array )   if ( set.Add( i ) == false )     return true;  return false;      

当然不考虑效率的花式玩法很多,但都比一个个去Contains要性能好:

       return array.Length != array.Distinct().Count();      
       return array.GroupBy( i => i ).Any( g => g.Count() > 1 );     

user avatar   jeffz 网友的相关建议: 
      

先别刷题了,看下基础数据结构书。




  

相关话题

  学C++之前需要先学C吗? 
  软件架构中解耦的意义难道是为了频繁的更换架构? 
  请问有什么好的C语言面向对象的扩展的方式?最好是有比较好的项目的源码参考。 
  如果编程语言有性别?Java、C++、C、C#是男是女?是GAY还是LES? 
  在宿舍写代码总被一个室友认为在装逼,该怎么办? 
  WPF中如何在Parallel.For中利用Dispatcher.Invoke实时更新进度条? 
  小白想学编程,有什么推荐的入门级别建议吗? 
  c# 的 装箱 和 拆箱 成本有多高? 
  如何向一个零基础的人,解释学习计算机编程的正确顺序和原因? 
  比尔·盖茨的编程水平怎么样?算得上是大师级别吗? 

前一个讨论
E9&"-"&E10&"-"&E11是啥意思?
下一个讨论
对富人征收更多税收的社会依据是什么?





© 2025-04-24 - tinynew.org. All Rights Reserved.
© 2025-04-24 - tinynew.org. 保留所有权利