因为逻辑太过简单,所以省略不写只是要注意的是,取最小索引时,要让mid=(r+l)/2;意味着取left和right和除以2向下取整,取最大索引时,要让mid=(l+r+1)/2,意味着取left和right和除以2向上取整
取目标元素的最小索引
伪代码
left
←
\leftarrow
← 1
right
←
\leftarrow
← array.length
repeat
mid=(right+left)/2;
if array[mid]=right
then right=mid
else if array[mid]<target
then left=mid+1
else
right=mid-1
until l>=r
return left
}
代码
public static int easyFunction(int[] st,int target){
int l=0;
int r=st.length-1;
int mid=(r+l)/2;
while (l<r){
//FIXME:这里mid取的是下届。
mid=(r+l)/2;
if (st[mid]==target){
r=mid;
}else if (st[mid]<target){
l=mid+1;}
}else if (st[mid]>target){
r=mid-1;
}
return l;
}
最大索引
伪代码
left
←
\leftarrow
← 1
right
←
\leftarrow
← array.length
repeat
mid=(right+left+1)/2;
if array[mid]=right
then left=mid
else if array[mid]<target
then left=mid+1
else
right=mid-1
until l>=r
return right
代码
public static int easyFunction(int[] st,int target){
int l=0;
int r=st.length-1;
int mid;
while (l<r){
//FIXME:这里mid取的是下届。
mid=(r+l+1)/2;
if (st[mid]==target){
l=mid;
}else if (st[mid]<target){
l=mid+1;}
if (st[mid]>target){
r=mid-1;
;}
}
return r;
}