怎样制作网站平台,上海比较有名的景观设计公司,长沙企业如何建网站,重庆网站建设与推广数组是存放在连续内存空间上的相同类型数据的集合数组下标都是从0开始的数组内存空间的地址是连续的正是因为数组在内存空间的地址是连续的#xff0c;所以我们在删除或者增添元素的时候#xff0c;就难免要移动其他元素的地址。
使用二分查找法返回的元素下标可能不是唯一的…数组是存放在连续内存空间上的相同类型数据的集合数组下标都是从0开始的数组内存空间的地址是连续的正是因为数组在内存空间的地址是连续的所以我们在删除或者增添元素的时候就难免要移动其他元素的地址。
使用二分查找法返回的元素下标可能不是唯一的这些都是使用二分法的前提条件
左闭右开 while (left right)这里使用 ,因为left right在区间[left, right)是没有意义的 if(nums[middle] target) right 更新为middle因为当前nums[middle]不等于target去左区间继续寻找而寻找区间是左闭右开区间所以right更新为middle即下一个查询区间不会去比较nums[middle] class Solution:def search(self, nums: List[int], target: int) - int:left0rightlen(nums)#左闭右开因为right索引没有意义sorted(nums)while(leftright):#左闭右开不能等于middle(leftright)//2#计算middleif nums[middle]target:#当等于目标值返回return middleelif nums[middle]target:#当middle大于目标值middle是下一个右边界但是右开因此只能等于rightmiddleelif nums[middle]target:#当middle小于目标值middle是下一个左边界但是左闭因此当前值已经取到并且不等所以需要加1leftmiddle1return -1左闭右闭 while (left right) 要使用 因为left right是有意义的所以使用 if (nums[middle] target) right 要赋值为 middle - 1因为当前这个nums[middle]一定不是target那么接下来要查找的左区间结束下标位置就是 middle - 1 class Solution:def search(self, nums: List[int], target: int) - int:left0rightlen(nums)-1#左闭右闭sorted(nums)while(leftright):#左闭右闭可以等于middle(leftright)//2#计算middleif nums[middle]target:#当等于目标值返回return middleelif nums[middle]target:#当middle大于目标值middle是下一个右边界但是右闭因此当前值已经取到并且不等所以需要减1rightmiddle-1elif nums[middle]target:#当middle小于目标值middle是下一个左边界但是左闭因此当前值已经取到并且不等所以需要加1leftmiddle1return -1