这可能是微软的面试问题。
从排序的数组中找出第k个最小的元素(忽略重复项)
[编辑]:数组可能包含重复项(未指定)。
想了很多次,但仍然质疑自己:还有更好的解决方案吗?
取最大堆
时间复杂度:O(NlogK)
空间复杂度:O(K)
这些元素可能是重复的。所以,通过与以前的元素进行比较来检查是否有唯一的元素
还可以使用改进版的快速排序分区算法。但它可能会导致最坏的情况,因为数组已经排序<这里出现了两个问题:
1。如果数组包含重复项,它是否有效
2。这会比我的第二次约会好吗?
我想知道是否存在任何O(logns)解?
对第k最小元素似乎有两种不同的解释。我假设它的意思是“第k个最小元素,忽略重复项。”
最佳解决方案是O(n)时间和O(1)空间,正如您在方法2中所描述的。我们可以证明这一点。
在两个非相邻数组元素具有相同值的特殊情况下,可以推断排序数组的任意长子序列的值:所有中间元素必须共享该值。但这不是一个典型的案例,所以我忽略了它。
下面是一个O(kLogN)解决方案:
使用二进制搜索的变体来查找给定值的最后一次出现,
这是一个面试问题。 在具有排序行和列的矩阵中找到Kth最小元素。 Kth最小元素是中的一个,例如,这是否正确?
我的问题是受到这个特殊的SO评论的启发,这个评论没有得到回答(我自己也面临这个问题): 我试图找到排序矩阵中第K个最小的元素: 给定一个nxn矩阵,其中每个行和列都按升序排序,返回矩阵中第k个最小的元素 请注意,它是排序顺序中的第k个最小元素,而不是第k个独立元素 输入:矩阵=[[1,5,9],[10,11,13],[12,13,15],[12,13,15],k=8 输出:13 说明:矩阵中的元素
所以我正在研究一个Leetcode问题,我的代码在某些情况下有效,但在某些情况下失败。 问题是: 给定一个矩阵,其中每个行和列都按升序排序,找出矩阵中第k个最小的元素。 请注意,它是排序顺序中的第k个最小元素,而不是第k个独立元素。 例子: 返回: 13 我的方法是使用minHeap,即使它声明数组已经排序,我仍然需要确保我已经将它从最小值排序到最大值。 这是我的代码: 以下是我的意见: 以下是输
这是一个面试问题。 在排序的行(但不是排序的列)和行之间没有关系的矩阵中查找第k个最小元素。(第一行和第n行之间没有关系——我们只知道每一行都是按升序排列的) 输入示例如下: 这种情况下的结果是 因为20是这个矩阵中第五小的元素。 我首先想到将所有元素添加到minHeap中,然后轮询元素,同时每次迭代从k中减去一个,直到我们得到答案。我还考虑为O(m*n)解决方案实现快速选择,尽管这些解决方案并没
你好,我正在尝试从IEEEXtreme 2014解决这个问题: 给你N个循环排列的整数。有N种方法可以拾取长度为M(M)的连续子序列 我的方法是首先创建一个排序数组列表,将新输入插入正确的位置。我将前M个整数添加到列表中。记录第K个最小值。然后我继续删除最旧的整数并将下一个整数添加到列表中,并将新的第K个值与旧的值进行比较。这是我的排序数组列表。 我认为这种蛮力方法效率不高,但还不能想出任何想法。