题目
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
示例 1:
输入: nums = [1,3,5,6], target = 5 输出: 2
示例 2:
输入: nums = [1,3,5,6], target = 2 输出: 1
示例 3:
输入: nums = [1,3,5,6], target = 7 输出: 4
示例 4:
输入: nums = [1,3,5,6], target = 0 输出: 0
示例 5:
输入: nums = [1], target = 0 输出: 0
提示:
1 <= nums.length <= 104 -104 <= nums[i] <= 104 nums 为无重复元素的升序排列数组 -104 <= target <= 104
自己想的:分情况讨论
思路
用一些if else 语句来找target
分情况:
1.<=0
2.数组中有这个值
3.没有这个值,并且这个值在中间
4.没有这个值,并且这个值在最后
代码
public int searchInsert(int[] nums, int target) { if (target <= nums[0]) {//如果target于或者等于0,就返回0 return 0; } else for (int i = 1; i < nums.length; i++) {//否则从1开始 if (nums[i] == target) {//如果有值等于target return i;//返回这个值的下标 } else if ((nums[i - 1] < target) && (nums[i] > target)) {//如果有个值,它的前一位<target,它自己>target,那就返回这个值的下标 return i; } } return nums.length;//如果以上都不是,那就是这个值是最大的,就返回数组长度 }
借鉴的:大神简洁版
思路
与我的其实一样,但人家只用了仅仅几行代码,将我分的很多种情况合并了
非常的简洁
代码
public int searchInsert(int[] nums, int target) { for(int i = 0; i < nums.length;i++){ if(nums[i] >= target){ return i; } } return nums.length; }