Tag: 数据结构

最有效的方式来存储一千个电话号码

这是一个谷歌面试问题: 有大约一千个电话号码被存储,每个有10个数字。 你可以假设每个数字的前5位数字是相同的。 您必须执行以下操作:a。 search给定的号码是否存在。 湾 打印所有的号码 什么是最有效的节省空间的方式来做到这一点? 我回答了哈希表和后来的哈夫曼编码,但是我的采访者说我没有正确的方向。 请帮我这里。 可以使用后缀特里助理? 理想情况下,存储1000个数字需要每个数字4个字节,因此总共需要4000个字节来存储1000个数字。 在数量上,我希望将存储空间减less到<4000字节,这就是我的采访者向我解释的。

在Linq中从列表中select多个字段

在ASP.NET C#中我有一个结构: public struct Data { public int item1; public int item2; public int category_id; public string category_name; } 我有一个列表。 我想selectcategory_id和category_name ,运行DISTINCT ,最后在ORDERBY上运行ORDERBY 。 这是我现在拥有的: List<Data> listObject = getData(); string[] catNames = listObject .Select(i=> i.category_name) .Distinct() .OrderByDescending(s => s) .ToArray(); 这显然只是获得类别名称。 我的问题是,我怎么得到多个字段,我将什么数据结构存储(不是一个string[] )? 编辑 使用结构列表并不是一成不变的。 如果最好改变我的支持数据结构,使select更容易(我会写很多这些),那么我很乐意采取build议。

如何在内存中表示一个六进制/hex网格?

假设我正在用一个六边形网格来构build一个棋盘游戏,比如卡坦的定居者 : 请注意,每个顶点和边可能有一个属性(上面的道路和结算)。 我将如何build立一个代表这个板子的数据结构? 访问每个瓦片的邻居,边缘和顶点的模式是什么?

以最佳方式在二叉查找树中查找第k个最小元素

我需要在二叉search树中find第k个最小的元素,而不使用任何静态/全局variables。 如何有效地实现它? 我脑海中的解决scheme是在O(n)中进行操作,这是最坏的情况,因为我打算对整棵树进行遍历遍历。 但内心深处,我觉得我不在这里使用BST财产。 我的假设解决scheme是否正确或有更好的解决scheme吗?

为什么会有人使用set而不是unordered_set?

C ++ 0x引入了unordered_set ,它可以在boost和许多其他地方使用。 我的理解是unordered_set是O(1)查找复杂度的散列表。 另一方面, set只不过是一个log(n)查找复杂度的树。 为什么人们会使用set而不是unordered_set ? 即是否需要set ?

search前10个search词的algorithm

我现在正在准备面试,这让我想起了曾经在以前的一次采访中被问到的一个问题: “您被要求devise一些软件来持续显示Google上的前10个search字词,您可以访问一个供稿源,该search字词可以在Google上search目前正在search的实时search词条,描述什么algorithm和数据结构你会用它来实现这个,你要devise两个变体: (i)显示所有时间的前10个search条件(即自您开始阅读提要以来)。 (ii)仅显示过去一个月的前10个search字词,每小时更新一次。 你可以使用近似值来获得前10名,但是你必须certificate你的select是合理的。“ 我在这次采访中轰炸了,至今还不知道如何实施。 第一部分要求在一个不断增长的无限列表子序列中最频繁的10个项目。 我研究了selectalgorithm,但是找不到任何在线版本来解决这个问题。 第二部分使用了一个有限的列表,但是由于大量的数据正在被处理,所以你不能真正的将整个月的search词存储在内存中,并且每小时计算一次直方图。 问题变得更加困难的事实,前10名单不断更新,所以不知何故,你需要通过滑动窗口计算前10名。 有任何想法吗?

什么时候应该使用HashSet <T>types?

我正在探索HashSet<T>types,但我不明白它在集合中的位置。 可以用它来代替List<T>吗? 我想HashSet<T>的性能会更好,但是我看不到其元素的单独访问。 仅仅是枚举吗?

用LINQ将一个集合拆分成`n`部分?

有没有一种很好的方式来将一个集合分成n部分与LINQ? 当然不一定均匀。 也就是说,我想把集合分成子集合,每个子集合都包含一个元素的子集,最后一个集合可以被破坏。

如何在java中实例化一个Queue对象?

当我尝试: Queue<Integer> q = new Queue<Integer>(); 编译器给我一个错误。 任何帮助? 另外,如果我想初始化一个队列,我必须实现队列的方法吗?

为什么std :: map实现为红黑树?

为什么std :: map实现为红黑树 ? 有几个平衡的二叉search树 (BST)。 在select红黑树时,什么是devise权衡?