Java&LeetCode 初入门——035. 搜索插入位置

Java&LeetCode 初入门——035. 搜索插入位置


文内代码全部采用JAVA语言。

题目

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

测试用例

示例 1:

输入: [1,3,5,6], 5
输出: 2

示例 2:

输入: [1,3,5,6], 2
输出: 1

示例 3:

输入: [1,3,5,6], 7
输出: 4

示例 4:

输入: [1,3,5,6], 0
输出: 0

个人解法

这题拿到手首先肯定想到的是 二分法查找,但是当我写完二分法的结果之后,居然告诉我超出时间限制,我真是气死了。
还不如直接查找,从头开始,一个一个比较,最后运行时间才4,ms,轻轻松松80%。
执行用时: 4 ms, 在Search Insert Position的Java提交中击败了86.52% 的用户

基本思想就是,从头开始挨个查找。如果大于当前数nums[i],那么就标记位置(因为是排序数组)。这里需要注意:目标数target取代的位置是比自己略大的数的位置,所以要return i+1。根据示例1,这里也不能添加等号,否则不能将target插入在原数之前。

class Solution {
   public int searchInsert(int[] nums, int target) {
		int loc =0;//存放位置
		for (int i = 0; i < nums.length; i++) {
			if (target>nums[i]) {
				loc=i+1;
			}
		}
		return loc;
		
	}
}

在看书的时候复习了 Array类的binarysearch()方法。写了新的算法,直接调用这个功能,代码简洁。

class Solution {
public int searchInsert(int[] nums, int target) {
		if (Arrays.binarySearch(nums,target)>=0) {
			return Arrays.binarySearch(nums,target);
		} else {
			return -Arrays.binarySearch(nums,target)-1;
		}
		
	}
}

官方解法

本题截止微博发表时间,leedcode中文官网尚未有官方解法。

看了一下评论区,也没有什么大神解法,很多都是和博主一样的暴力查找。有空上外文leedcode看看。上面的评论更多,国内外大神也更多。

猜你喜欢

转载自blog.csdn.net/qq_27480345/article/details/86080584