问题描述:
给定一个排序的整数数组(升序)和一个要查找到目标整数target,查找到target第1次出现的下标(从0开始),如果target不存在于数组中,返回-1。
问题示例:
输入数组[1,4,4,5,7,7,8,9,10]和目标整数1,输出其所在的位置0,即第一次出现在0位置。输入数组[1,2,3,3,4,5,10]和目标整数3,输出2,即第一次
出现在第2个位置。输入数组[1,2,3,3,4,5,10]和目标整数6,输出-1,即没有出现过6,返回-1。
"""
问题描述:
给定一个排序的整数数组(升序)和一个要查找到目标整数target,查找到target第1次出现的下标(从0开始),如果target不存在于数组中,返回-1。
问题示例:
输入数组[1,4,4,5,7,7,8,9,10]和目标整数1,输出其所在的位置0,即第一次出现在0位置。输入数组[1,2,3,3,4,5,10]和目标整数3,输出2,即第一次
出现在第2个位置。输入数组[1,2,3,3,4,5,10]和目标整数6,输出-1,即没有出现过6,返回-1。
"""
#方法一、
class Suach:
def __init__(self,nums,index):
self.nums = nums
self.index = index
def index_one(self):
for i in self.nums:
if i == self.index:
return self.nums.index(i)
return -1
nums = [1,4,4,5,7,7,8,9,10]
index = 22
suach = Suach(nums,index)
print("输入:",nums,"***","目标整数:",index)
print("输出:",suach.index_one())
#方法二、
class For:
def seach(self,num,n):
list1 = []
p = 0
for i in range(len(num)):
list1.append(i)
for j in num:
if j != n:
p += 1
else:
return list1[p]
if p == len(num):
return -1
num = [1,4,4,5,7,7,8,9,10]
n = 8
forr = For()
print("输入:",num,"***","目标整数:",n)
print("输出:",forr.seach(num,n))
#方法三
class Solution:
#参数nums:整数数组
#参数target:要查找的目标数字
#返回值:目标数字第一次出现的位置,从0开始
def binarySearch(self,nums,target):
return self.search(nums,0,len(nums) - 1,target)
def search(self,nums,start,end,target):
if start > end:
return -1
mid = (start + end)//2
if nums[mid] > target:
return self.search(nums,start,mid,target)
elif nums[mid] == target:
return mid
elif nums[mid] < target:
return self.search(nums,mid,end,target)
#主函数
if __name__ == "__main__":
my_solution = Solution()
nums = [1,2,7,3,3,4,5,10]
target = 3
targetindex = my_solution.binarySearch(nums,target)
print("输入:",nums," ","target =",target)
print("输出:",targetindex)
结果: