leetcode原题地址:https://oj.leetcode.com/problems/search-insert-position/
原题内容如下:
Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.
You may assume no duplicates in the array.
Here are few examples.
[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0
题目含义解释:
题目说的是给你一个有序数组,和一个目标元素,如果目标元素能找到,则返回它的下标,如果没有,则返回它在序列中有可能的下标。
解题报告:
1、题目含义其实就是二分查找算法(或折半搜索算法)的定义。
2、维基百科是这么定义的:
二分查找算法,又称折半搜索算法,是一种在有序数组中查找某一特定元素的搜索算法
3、举出的四个示例的意思是这样的:
[1,3,5,6], 5 → 2 目标元素5在数组中的下标是2, 说明该数组是从下标0开始算起
[1,3,5,6], 2 → 1 目标元素2,虽不在数组中,但是因为它是个有序数组,所以它有可能在元素1和元素3之间,而元素1的下标是0,所以目标元素2如果也在数组中的话,那它有可能的下标就是1
[1,3,5,6], 7 → 4 目标元素7,虽不在数组中,但是因为它是个有序数组,所以它有可能在元素6之后,而元素6的下标是3,则7的下标有可能是4
[1,3,5,6], 0 → 0 目标元素0,虽不在数组中,但是因为它是个有序数组,所以它有可能在元素1之前,也就是在整个数组的最前面,而按示例1得到,数组是从下标0开始的,所以目标元素0的下标就应该是0
4、好了,从前面3点,我们知道了完整程序该包含如下部分:
定义一个 名为Search_insert_position的class,
4.1 里面要定义一个数组 int[] A={1,3,5,6} ,定义目标元素target,比如target=5
4.2 需包含二分查找算法,把它定义为方法 public int search_Insert(int[] A, int target ){}
4.3 最后要有main函数
package search;
public class Search_insert_position{
//二分查找算法
public int search_Insert(int[] A,int target){
if (A == null || A.length == 0){
return 0;
}
int l=0;
int r=A.length -1;
int mid=(1+r)/2;
//记住:二分查找算法的条件是start<=end,不是start<end
while(l<=r)
{
if(A[mid]==target)
return mid;
else {
if(A[mid]<target)
l=mid+1;
else
r=mid-1;
}
}
return l;
}
//定义main函数
public static void main(String[] args){
Search_insert_position sip = new Search_insert_position();
//定义一个数组A,定义名为target的目标元素
int[] A = {1,3,5,6};
int target = 5;
System.out.print(sip.search_Insert(A,target));
}
}