Search insert position @leetcode

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));
	}
	
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值