leetcode算法练习【35】搜索插入位置

所有题目源代码:Git地址

题目

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

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

示例 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


方案:二分查找

class Solution {
        public int searchInsert(int[] nums, int target) {
            if (nums[0]>target) return 0;
            if (nums[nums.length-1]<target) return nums.length;
            return search(nums, 0, nums.length - 1, target);
        }

        public int search(int[] nums, int first, int last, int target) {
            int mid = (first + last) / 2;
            if (first==last-1){
                if (nums[first]==target)return first;
                else if (nums[last]==target) return  last;
                else return last;
            }
            if (nums[mid] > target) return search(nums, first, mid, target);
            else if (nums[mid] < target) return search(nums, mid, last, target);
            else if (nums[mid] == target) return mid;
            return -1;
        }
    }
复杂度计算
  • 时间复杂度:O(logn)
  • 空间复杂度:O(1)
原创文章 179 获赞 270 访问量 34万+

猜你喜欢

转载自blog.csdn.net/symuamua/article/details/105984880
今日推荐