cdsn_Python 2022-08-06 12:05 采纳率: 68.8%
浏览 45
已结题

关于leetcode二分法的问题,如何解决?

 问题遇到的现象和发生背景
leetcode题目,给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。
示例 1:
输入:nums = [5,7,7,8,8,10], target = 8
输出:[3,4]
示例 2:
输入:nums = [5,7,7,8,8,10], target = 6
输出:[-1,-1]
 问题相关代码,请勿粘贴截图



def findall(nums,target):
    min=0
    max=len(nums)
    list=[-1,-1]
    n=True
    while max>=min and n:
        mid=(max+min)//2
        print(0)
        if nums[mid]<target and nums[mid+1]<target:
            min=mid+1
        elif nums[mid]<target and nums[mid+1]==target:
            list[0]=mid+1
        elif nums[mid]==target and nums[mid+1]>target:
            list[1]=mid
        elif nums[mid]>target and nums[mid+1]>target:
            max=mid-1
        else:
            min1=0
            max1=mid
            min2=mid
            max2=len(nums)-1
            a=True
            b=True
            while max1>=min1 and a:
                mid1=(max1+min1)//2
                print(2)
                # print(max1,mid1,min1)
                if mid+1<len(nums):
                    # print(max1, mid1, min1)

                    if nums[mid1] < target and nums[mid1 + 1] < target:
                        min1 = mid1+1
                    elif nums[mid1] < target and nums[mid1 + 1] == target:
                        list[0] = mid1 + 1
                        a=False
                    else:
                        max1=mid1-1

            while max2>=min2 and b:
                print(1)
                mid2=(max2+min2)//2
                if mid2+1<len(nums):
                    if nums[mid2] > target and nums[mid2 + 1] > target:
                        max2 = mid2
                    elif nums[mid2] == target and nums[mid2 + 1] > target:
                        list[1] = mid2
                        b=False
                    else:
                        min2=mid2+1
            n=False
    return list

运行结果及报错内容
输入print(findall([1,1,2,2,2,3,3,3,3,4,4,4,4],4))
结果一只循环
我的解答思路和尝试过的方法

我想要达到的结果
还是按照我的思路,帮忙看看是哪里出了问题

  • 写回答

1条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 系统已结题 8月14日
      • 创建了问题 8月6日

      悬赏问题

      • ¥20 类似羊了个羊修改三个不同图片才能消除
      • ¥15 环绕字符串的子字符串个数(实在做不出来,只能做到普通字符串)
      • ¥20 B站评论区 点击这个蓝字就打开一张图片 是怎么做的
      • ¥15 数组并求平均数及各值与平均数之差
      • ¥15 Qt5.9.9+Vs2017遇到字符集问题
      • ¥25 win11无法启用windows功能
      • ¥15 spm-cat进行VBM分析出错
      • ¥50 c++dll中,在函数中创建线程,在函数执行完之后,线程也被销毁了,有什么办法可以让线程持续运行?
      • ¥15 微信小程序真机测试报错空白
      • ¥15 急需帮助!!!非常需要帮助