小编use*_*288的帖子

什么是STL列表,向量和集合的基础数据结构?

什么是STL列表,向量和集合的基础数据结构?

我的解决方案

  • vector :(动态分配)数组
  • 清单:?
  • set:heap(或二叉树,所有叶节点尽可能保留在左边,并保持最小/最大元素在顶部)

对?

c++ stl list vector set

9
推荐指数
2
解决办法
1万
查看次数

如何检测和找出程序是死锁?

这是一个面试问题.

如何检测并查明程序是否处于死锁状态?是否有一些工具可用于在Linux/Unix系统上执行此操作?

我的想法:

如果程序没有进展并且其状态正在运行,则它是死锁.但是,其他原因也可能导致这个问题.开源工具是valgrind(halgrind)可以做到的.对?

unix linux multithreading deadlock multiprocessing

7
推荐指数
2
解决办法
2万
查看次数

电话簿的数据结构,可以按名称搜索号码,也可以按号码搜索姓名

你知道以下面试问题的解决方案吗?

设计电话簿的数据结构,可以安全有效地按名称搜索数字,并按编号搜索名称.


细节:

stackoverflow上的解决方案都是关于哈希表的,但是,我必须为它构建2个哈希表,这需要两倍的空间.

如何以时间和空间效率,类型安全的方式只使用一个数据结构?

hash dictionary hashmap data-structures

7
推荐指数
2
解决办法
1万
查看次数

在方阵中,每个单元格为黑色或白色.设计算法以找到最大子方块,使得所有4个边界都是黑色的

给定方阵,每个单元格为黑色或白色.设计算法以找到最大子方块,使得所有4个边界都是黑色的.

我有O(n ^ 2)算法:

从左到右扫描每列,对于每列中的每个单元格,扫描每一行以找到具有后边框的最大子广场.

有更好的解决方案吗?

谢谢

c c++ algorithm performance data-structures

6
推荐指数
1
解决办法
2258
查看次数

给定一个字符串数组,返回作为字谜的所有字符串组

给定一个字符串数组,返回作为字谜的所有字符串组.

我的解决方案

对于数组中的每个字符串字,将其排序为O(m lg m),m是字的平均长度.

构建哈希表<string,list>.

将排序后的单词作为键放入哈希表中,并生成单词的所有排列(O(m!)),使用O(m)搜索字典中的每个排列(前缀树映射),如果它在字典中,将(O(1))放入哈希表中,以便将所有排列的单词放入具有相同键的列表中.

总共有O(n*m*lg m*m!)时间和O(n*m!)空间,n是给定数组的大小.

如果m非常大,那就没有效率了,m!.

更好的解决方案?

谢谢

c++ algorithm anagram data-structures

6
推荐指数
2
解决办法
5510
查看次数

如何设计最近最新使用的缓存?

如何设计最近最新使用的缓存?

假设您访问了一些项目.您需要设计一个数据结构来保存这些项目.每个项目都与最近访问的时间相关联.

每次访问项目时,请在数据结构中进行检查.如果该项目已在缓存中,请更新其访问时间.否则,将其插入缓存中.高速缓存大小是固定的,如果已满,则删除最旧的项目.

我的解决方案

  1. 使用地图<item,visitTime>

  2. 初始化:使用f(visitTime)按降序对地图进行排序.O(nlg n)

  3. 如果访问了某个项目,请使用O(lg n)在地图中搜索该项目.

  4. 如果它已在地图中,则更新时间O(1).对地图O(lg n)进行排序.

  5. 如果没有,请将其插入地图然后排序.O(lg n)

  6. 如果地图大小>固定大小,则删除最后一个元素O(1).

另一种方案:

  1. 使用哈希表<item,visitTime>

  2. 将它排序为O(n lgn).

  3. 如果访问了某个项目,请使用O(1)在该项目中进行搜索.

  4. 如果它已在表中,则更新时间O(1).对表O(n lg n)进行排序.

  5. 如果没有,请将其插入表中然后排序.O(n lg n)

  6. 如果表大小>固定大小,则删除最后一个元素O(1).

有更好的解决方案吗?上) ?

c++ algorithm hash lru data-structures

5
推荐指数
1
解决办法
1358
查看次数

给定一个字符串,找到它在字典中的单词的所有排列

这是一个面试问题:

给定一个字符串,找到它在字典中的单词的所有排列.

我的解决方案

将字典的所有单词放入后缀树中,然后搜索树中字符串的每个排列.

搜索时间是O(n),n字符串的大小在哪里.但字符串可能有n!排列.

如何提高效率?

c++ algorithm search suffix-tree data-structures

5
推荐指数
1
解决办法
4074
查看次数

如何通过添加实现除法?

面试问题.

如何通过添加实现除法?假设他们都是int.

我的想法

  1. 添加除数给它自己,直到它大于被除数.每次迭代,在添加之前保留总和结果.
  2. 商是最后一次加法之前的总和结果.剩余部分可以加1来计算quotient * divisor + reminder == dividend.

这是O(e^n)什么更好的想法?位操作?

c++ algorithm division addition

5
推荐指数
2
解决办法
4295
查看次数

设计算法,找到书中最常用的单词

面试问题:

找到书中最常用的单词.

我的想法:

使用哈希表,遍历并标记哈希表.

如果已知书的大小,如果发现任何单词的使用率> 50%,则跳过以下遍历中的任何新单词并仅计算旧单词.如果图书大小未知怎么办?

它是O(n)和O(n)的时间和空间.

有更好的想法吗?

谢谢

python algorithm hash data-structures

5
推荐指数
1
解决办法
2526
查看次数

交换两个序列的元素,使元素和的差异变得最小.

面试问题:

给定两个非有序整数序列ab,其大小为n时,所有的数字是随机选取的:交换的元素ab,使得所述元素的总和a减去的元素的总和b是最小的.

举个例子:

a = [ 5 1 3 ]
b = [ 2 4 9 ]
Run Code Online (Sandbox Code Playgroud)

结果是(1 + 2 + 3) - (4 + 5 + 9)= -12.

我的算法:将它们排序在一起,然后将第一个最小的n整数放入a和放入b.它的时间为O(n lg n),空间为O(n).我不知道如何将其改进为时间为O(n)且空间为O(1)的算法.O(1)意味着除了seq 1和2之外我们不需要更多的额外空间.

有任何想法吗 ?

另一个问题是:如果我们需要最小化差异的绝对值(最小化|sum(a) - sum(b)|)怎么办?

首选python或C++思想.

c++ python algorithm data-structures

5
推荐指数
1
解决办法
1965
查看次数