有一严格升序的整型数组A,元素个数为n。现将其前k(0≤k≤n)个元素整体移动到数组后面,得到数组B,使B数组的前n-k个元素恰好是A数组的后n-k个元素,B数组的后k个元素恰好是A数组的前k个元素,且前后两部分的内部升序仍保持不变。请设计一个算法在B数组中查找某个给定元素value。算法设计在函数searchValue中,函数头可采用searchValue(int B[ ], int value)。那么你设计的高效算法的时间复杂度是
A: O(n)
B: O(n^0.5)
C: O(log n)
D: O((log n)^2)
A: O(n)
B: O(n^0.5)
C: O(log n)
D: O((log n)^2)
举一反三
- 设计一个时间复杂度为O(n)的算法,实现将数组A[n]中所有元素循环左移k个位置。
- 已知m>;n,m个元素的有序数组与n个元素的有序数组做两路归并,其时间复杂度为________ A: O(m) B: O(n) C: O(m+n) D: O(m*n)
- 给定n个元素,使用分治算法找k小元素,如果保证分治的两个子数组中最小的数组是原数组的ε倍,时间复杂度可以由nlogn降低为n A: 正确 B: 错误
- 设线性表有n个元素且采用顺序存储表示,算法的时间复杂度为O(1)的操作是()。 A: 访问第i个元素和求第i个元素的直接前趋(2≤i≤n) B: 在第i(1≤i≤n)个元素后面插入一个新元素 C: 删除数组第i个元素 D: 顺序查找与给定值k相等的元素
- 给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k小的元素,请设计一个最坏时间复杂度为O(n)的算法,并对其时间复杂度进行分析说明。