Python 查找将元素插入排序数组的位置
问题:找到将元素插入排序数组的位置Python 查找将元素插入排序数组的位置,python,algorithm,Python,Algorithm,问题:找到将元素插入排序数组的位置 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:
A[1] > A[2] > A[3] > ... > A[ n ]
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
def find_位置(元素,l):
i=0
插入=错误
对于l中的项目:
如果元素<项目:
插入=真
打破
i=i+1
如果未插入:
返回长度(l)
其他:
返回i
其他一些学生写了一个二进制搜索,最坏的情况比我的好,并告诉我我的答案不正确。但是我不同意,因为这个练习没有明确地写一个优化算法
我的逻辑有错误吗?根据您所说的条件: 1) 写一个算法来解决一个问题 2) 分析该问题的渐近复杂性
显然是你干的。你的解决方案是显而易见的,不是最好的 只需检查它是否落在数字后面(如下所示)
二进制搜索的最佳情况效率为O(1),最坏情况(平均情况)效率为O(logn)
publicstaticintsearchinsert(int[]nums,int目标){
int start=0;
int end=nums.length-1;
如果(nums[结束]<目标){
返回端+1;
}否则如果(nums[start]>=目标){
返回启动;
}
while(开始<结束){
int mid=start+(end-start)/2;
如果(nums[mid]==目标){
中途返回;
}否则如果(nums[mid]
您实际上没有插入任何内容。此外,最好和最坏的情况在没有特定算法的情况下是没有意义的,因此第1部分不是一个格式良好的问题。对不起,我修正了老师的答案,出现了翻译错误。葡萄牙语中是:“考虑到新元素的新中心问题:”
for l in range(0, len(lst)):
if lst[l] >= number_to_be_inserted:
lst.insert(l+1, number_to_be_inserted)
break
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;
}