版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hsx1612727380/article/details/84254950
Title: Search Insert Position 35
Difficulty:Easy
原题leetcode地址:https://leetcode.com/problems/search-insert-position/
本题比较简单,需要开始时想到二分查找。下面给出两种基本的解法(一般解法和二分查找)
1. 一般解法,时间&空间复杂度如下:
时间复杂度:O(n),一层for循环的遍历,遍历整个数组的长度。
空间复杂度:O(1),没有申请额外的空间。
/**
* 普通解法,遍历整个数组的长度,
* 如果当前的nums[i]小于目标值target,继续下一个nums值,
* 如果大于目标值,则找到这个位置
* @param nums
* @param target
* @return
*/
public static int searchInsert(int[] nums, int target) {
int flag = -1;
if (nums.length <= 0 || nums == null) {
flag = 0;
}
if (nums[0] > target) {
flag = 0;
}
if (nums[nums.length - 1] < target) {
flag = nums.length;
}
for (int i = 0; i < nums.length; i++) {
if (nums[i] < target) {
continue;
}
if (nums[i] >= target) {
flag = i;
break;
}
}
return flag;
}
2. 二分查找,时间&空间复杂度如下:
时间复杂度:O(logn)。
空间复杂度:O(1),没有申请额外的空间。
/**
* 二分查找
* @param nums
* @param target
* @return
*/
public static int searchInsert2(int[] nums, int target) {
if (nums.length <= 0 || nums == null) {
return 0;
}
int start = 0;
int end = nums.length - 1;
while (start <= end) {
int middle = (start + end) / 2;
if (nums[middle] == target) {
return middle;
}
else if (nums[middle] < target) {
start = middle + 1;
}
else {
end = middle - 1;
}
}
return start;
}