Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找将元素插入排序数组的位置_Python_Algorithm - Fatal编程技术网

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 ]
  • 展示最好和最坏的情况
  • 写一个算法来解决这个问题
  • 我的答覆是:

    最好的情况是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
    
    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;
    }