今天开始进行为期两个月的代码随想录刷题,并在此更新我的做题记录,也期望博客能成为我记录学习的一个好习惯。
第一章为数组,也叫做顺序表,它的最大特点就是顺序存储且地址连续。
第一道题为二分查找,该方法只适用于数组中元素的大小有序的情况下,基本原理大概为:当给定一个数组以及一个所需要查找的数字时,先取数组最中间的元素即下标为1/2这样的时候,先与之对比。以升序为例,如果中间的元素比所查找的元素大,那么就将查找区间转为该下标的右边部分,反之则查找左边部分。
谈谈实现,由于我是算法菜鸟,因此我并不报仅靠自己就可以实现算法的期望,正如我常说的,我是一个庸才,但我仍然想重复天才已给出的财富,在此之上不断重复以期望找寻自己的创新。扯远了,我们需要一前一后两个指针,这样才可以方便找到数组中间的位置,在这里还要注意边界问题:
func search(nums []int,target int) int {
left:=0
right:=len(nums) -1
for left <= right {
mid:=left + (right - left)>>1
if target == nums[mid] {
return mid
}else if target > nums[mid] {
left = mid+1
}else{
right = mid -1
}
}
return -1
}
标签:target,nums,int,mid,Day1,查找,数组
From: https://www.cnblogs.com/leisure535/p/18209545