给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为
O(log n)的算法。
- class Solution {
- public int searchInsert(int[] nums, int target) {
- if(nums.length == 1){
- if(nums[0] == target){
- return 0;
- } else if (nums[0] < target){
- return 1;
- } else {
- return 0;
- }
- }
- int left = 0;
- int right = nums.length - 1;
- int middle = 0;
- while (left < right){
- if(left + 1 == right){
- if(nums[left] == target){
- return left;
- } else if(nums[right] < target){
- return right + 1;
- } else if (nums[left] > target) {
- return Math.max(0, left - 1);
- } else {
- return right;
- }
- } else {
- middle = (left + right) / 2;
- if(nums[middle] == target){
- return middle;
- } else if (nums[middle] > target){
- right = middle;
- } else {
- left = middle;
- }
- }
- }
- return middle + 1;
- }
- }