美文网首页
LeetCode代码分析——35. Search Insert

LeetCode代码分析——35. Search Insert

作者: JackpotDC | 来源:发表于2018-05-13 13:15 被阅读7次

    题目描述

    Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.
    给定一个排序好的数组和target值,如果找到目标值就返回,如果没有找到就返回它在插入的时候应该有的位置。

    You may assume no duplicates in the array.
    数组元素不重复。

    Example 1:

    Input: [1,3,5,6], 5
    Output: 2

    Example 2:

    Input: [1,3,5,6], 2
    Output: 1

    Example 3:

    Input: [1,3,5,6], 7
    Output: 4

    Example 4:

    Input: [1,3,5,6], 0
    Output: 0

    思路分析

    二分查找的变种,而且是很简单的那种,只需要在找不到元素的时候考虑下该怎么做,例如Example 2,二分查找会沿着3-1,最后target > nums[mid],然后发现没有找到,所以需要上一步记录下mid + 1的位置,因此递归时需要额外的参数possible表示每次递归的下一次如果没有找到那么应该返回多少
    当二分查找去[start, mid - 1]找的时候,possible置为mid;
    当二分查找去[mid + 1, end]找的时候,possible置为mid + 1;

    代码实现

    public class Solution {
    
        /**
         * 62 / 62 test cases passed.
         *  Status: Accepted
         *  Runtime: 5 ms
         *
         * @param nums
         * @param target
         * @return
         */
        public int searchInsert(int[] nums, int target) {
            return findPosition(nums, 0, nums.length - 1, target, -1);
        }
    
        public int findPosition(int[] nums, int start, int end, int target, int possible) {
    
            if (start > end) {
                return possible;
            }
    
            int mid = (start + end) / 2;
    
            if (nums[mid] == target) {
                return mid;
            } else if (target < nums[mid]) {
                return findPosition(nums, start, mid - 1, target, mid);
            } else {
                return findPosition(nums, mid + 1, end, target, mid + 1);
            }
    
        }
    }
    

    相关文章

      网友评论

          本文标题:LeetCode代码分析——35. Search Insert

          本文链接:https://www.haomeiwen.com/subject/gfhldftx.html