当前位置:网站首页>Negative number +0+ positive number

Negative number +0+ positive number

2022-06-11 01:38:00 sueong

A pile of negative numbers + a pile 0+ A pile of positive numbers
Find the subscript of the last negative number and the first positive number Subscript from 1 Start
Sure enough, it didn't work. I can't see what went wrong 555

def findnum(nums):
    res = []
    for i in range(len(nums)):
        #  If it's all 0  The border 
        if nums[0] == 0 and nums[-1] == 0:
            return 0, 0
        #  Record 0 The subscript 
        elif nums[i] == 0:
            #  Because the numbers are subscript 1 Start 
            res.append(i + 1)
        elif nums[i] > 0:#  Find a positive number and jump out of the loop 
            break
    print(res)
    return res[0] - 1, res[-1] + 1


nums = [-3, -4, -1, 0, 0, 0, 0, 1, 2, 3, 6]
print(findnum(nums))

nums = [0, 0, 0, 0, 1, 2, 3, 6]
print(findnum(nums))

nums = [0, 0, 0, 0]
print(findnum(nums))

Two points Find the first one 0 And the last 0 The location of Then each of them is the subscript they are looking for

class Solution():
    def find_left(self, nums):
        l = 0
        r = len(nums) - 1
        while l <= r:
            mid = (l + r) // 2
            if nums[mid] == 0:
                r = mid - 1
            elif nums[mid] > 0:
                r = mid - 1
            else:
                l = mid + 1
        #  first 0,l>right = mid -1 l=mid
        #  Subscript from 1 Start 
        return l + 1

    def find_right(self, nums):
        l = 0
        r = len(nums) - 1
        while l <= r:
            mid = (l + r) // 2
            if nums[mid] == 0:
                l = mid + 1
            elif nums[mid] < 0:
                l = mid + 1
            else:
                r = mid - 1
        #  the last one 0,l = mid+1 r=mid
        #  Subscript from 1 Start 
        return r + 1

    def find_num(self, nums):
        if not nums or nums[0] == 0 and nums[-1] == 0:
            return 0, 0
        ll = self.find_left(nums)
        rr = self.find_right(nums)
        return ll - 1, rr + 1


nums = [-3, -4, -1, 0, 0, 0, 0, 1, 2, 3, 6]
s = Solution()
print(s.find_num(nums))


nums = [0, 0, 0, 0, 1, 2, 3, 6]
print(s.find_num(nums))

nums = [0, 0, 0, 0]
print(s.find_num(nums))
原网站

版权声明
本文为[sueong]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/162/202206110022338336.html