问题:找到将元素插入排序数组的位置
A[1] > A[2] > A[3] > ... > A[ n ]
我的回答:
最好的情况是T(n)= 1,换言之,在第一个位置,其中n是元素的大小。最坏的情况是T(n)= n + 1,换句话说最后一个位置+ 1。
def find_position(element, l):
i = 0
inserted = False
for item in l:
if element < item:
inserted = True
break
i = i +1
if not inserted:
return len(l)
else:
return i
其他一些学生写了二进制搜索,最糟糕的情况比我的好,并告诉我答案是不正确的。但我不同意,因为编写优化算法的练习并不明确。
我的逻辑中有错误吗?
答案 0 :(得分:0)
鉴于你所说的条件很简单:
1)编写算法来解决问题 2)分析所述问题的渐近复杂度
你显然做到了这些。你的解决方案是显而易见的,而不是最好的解决方案。
答案 1 :(得分:0)
只需检查它是否在数字之后(如下所示......)
for l in range(0, len(lst)):
if lst[l] >= number_to_be_inserted:
lst.insert(l+1, number_to_be_inserted)
break
答案 2 :(得分:0)
二元搜索的最佳情况效率为O(1),最坏情况(平均情况)的效率为O(log n)。
public static int searchInsert(int[] nums, int target) {
int start = 0;
int end = nums.length - 1;
if (nums[end] < target) {
return end + 1;
} else if (nums[start] >= target) {
return start;
}
while (start < end) {
int mid = start + (end - start) / 2;
if (nums[mid] == target) {
return mid;
} else if(nums[mid] < target) {
start = mid + 1;
} else {
end = mid;
}
}
return end;
}