我有两个关于确定2个算法的时间复杂度的问题。
用比较法从一组n个不同的数字中确定最小的3个数字。
这里,我想到的方法是取3个变量(例如:min1、min2&min3,其中min1是这3个变量中最小的一个,min3是最大的一个),用列表的1ST3个元素初始化它们,并扫描列表一次。对于列表中的每个数字x,我们有以下4种情况:
所以,基本上,在最坏的情况下,它需要3N个比较,在最好的情况下需要0个比较。
纠正我,如果它可以做一个其他更容易(更少的时间限制)的方式。实际上,我对选项3和4感到困惑。
用比较法从一组n个不同的数字中确定最小和最大的数字。
我像以前一样,用类似的论点得出了答案2(n-1)。尽管我仍然在选项2和选项4之间感到困惑。
问题1:您可以通过首先与MIN2进行比较,将算法改进到2N个比较。这仍然是O(n)。要知道n+o(1)是不够的,请注意有n*(n-1)*(n-2)种可能性,其中MIN1、MIN2和MIN3位于这里。取对数到基数2,以获得所需比较次数的下限。
问题2:这可以在3*CEIL(n/2)中完成,方法是比较两个连续的元素,然后将较小的元素与当前最小的元素进行比较,将较大的元素与当前最大的元素进行比较。
我在GeekforGeekshttps://www.geeksforgeeks.org/minimum-number-of-jumps-to-reach-end-of-a-given-array/中检查“到达终点的最小跳跃次数”问题。我对这里提到的时间复杂度感到困惑,它是O(n^n)。 如果我看到上面的代码块,minJumps(arr,I,h)递归调用是从I=l1调用的。所以在每个递归步骤中,l(
给定一个整数数组arr,计算元素x,使得x 1也在arr中。如果arr中有重复项,请分别计数。 示例1:输入:arr=[1,2,3]输出:2说明:1和2被计数,因为2和3在arr中。 示例2:输入:arr=[1,1,2]输出:2解释:1计数两次,原因2在arr中。 示例3:输入:arr=[1,1,3,3,5,5,7,7]输出:0说明:没有计算数字,因为arr中没有2、4、6或8。 示例4:输入:a
如果您有长度的排序数组,请查找其中最小的元素。这里有一些潜在的解决方案,有些涉及最小堆或二进制搜索,但我想知道使用QuickSelect的时间复杂度是多少。如果我们简单地将每个数组连接在一起,并在组合数组上使用quickselect。 Quickselect在一般情况下以线性时间运行,但是数组的组合确实会扩展搜索空间,但它比使用合并策略更有效,因为如果选择了好的枢轴,Quickselect必然允许
本文向大家介绍n个整数的无序数组,找到每个元素后面比它大的第一个数,要求时间复杂度为O(N) ?相关面试题,主要包含被问及n个整数的无序数组,找到每个元素后面比它大的第一个数,要求时间复杂度为O(N) ?时的应答技巧和注意事项,需要的朋友参考一下
我有n个数组。这些数组中的每一个都可以是无限长的。(长度可以可变)。所有这n个数组都被排序了。