给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
我的代码:
class Solution {
public int searchInsert(int[] nums, int target) {
if( nums.length == 0)return 0 ;
int i ;
for( i = 0 ; i < nums.length ; i ++){//从头到尾遍历
if(nums[i] >= target)
return i ;
}
return i ;
}
}
看起来很简单,一次遍历
时间复杂度:O(n),一个for循环
空间复杂度:O(1)
看了别人的:排序数组,查找用二分法!!!!!
class Solution {
public int searchInsert(int[] nums, int target) {
if( nums.length == 0)return 0 ;
int left = 0 , right = nums.length;//二分法
int mid = (left + right)/2 ;
while(left < right){
mid = (left + right)/2 ;
if(nums[mid] == target)
return mid ; //正好是,就返回mid
else if(nums[mid] < target){
left = mid + 1 ;
}else{
right = mid ;
}
}
return left ;//没有返回left
}
}
用二分法,做题太少,没有想到
时间复杂度:O(log(n)) 好了一个档次
空间复杂度:O(1)