zoukankan      html  css  js  c++  java
  • [LeetCode] 35. Search Insert Position 搜索插入位置

    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.

    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 1:

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

    给一个有序数组和一个目标值,数组中没有重复的元素,如果找到目标元素就返回index,如果没有找到就返回要插入的使其有序的位置。

    解法1:暴力搜索Brute force

    解法2:二分法Binary Search,这个显然是要考察的方法。

    Java:

    class Solution {
        public int searchInsert(int[] A, int target) {
            int low = 0, high = A.length-1;
            while(low<=high){
                int mid = (low+high)/2;
                if(A[mid] == target) return mid;
                else if(A[mid] > target) high = mid-1;
                else low = mid+1;
            }
            return low;
        }
    } 

    Java:

    public int searchInsert(int[] nums, int target) {
        int low = 0, high = nums.length;
        while(low < high) {
            int mid = low + (high - low) / 2;
            if(nums[mid] < target)
                low = mid + 1;
            else
                high = mid;
        }
        return low;
    }  

    Python:

    class Solution(object):
        def searchInsert(self, nums, target):
            """
            :type nums: List[int]
            :type target: int
            :rtype: int
            """
            left, right = 0, len(nums) - 1
            while left <= right:
                mid = left + (right - left) / 2
                if nums[mid] >= target:
                    right = mid - 1
                else:
                    left = mid + 1
    
            return left 

    Python: wo

    class Solution(object):
        def searchInsert(self, nums, target):
            """
            :type nums: List[int]
            :type target: int
            :rtype: int
            """
            left, right = 0, len(nums) - 1
            while left <= right:
                mid = left + (right - left) / 2
                if nums[mid] > target:
                    right = mid - 1
                elif nums[mid] < target:
                    left = mid + 1
                else:
                    return mid
                
            return left  

    C++: Brute force, TLE

    class Solution {
    public:
        int searchInsert(vector<int>& nums, int target) {
            for (int i = 0; i < nums.size(); ++i) {
                if (nums[i] >= target) return i;
            }
            return nums.size();
        }
    };
    

    C++: BS  

    class Solution {
    public:
        int searchInsert(vector<int>& nums, int target) {
            if (nums.back() < target) return nums.size();
            int left = 0, right = nums.size() - 1;
            while (left < right) {
                int mid = left + (right - left) / 2;
                if (nums[mid] == target) return mid;
                else if (nums[mid] < target) left = mid + 1;
                else right = mid;
            }
            return right;
        }
    };
    

      

    类似题目:

    [LeetCode] 374. Guess Number Higher or Lower 猜数字大小

    [LeetCode] 278. First Bad Version 第一个坏版本

    Search for a Range
    Sqrt(x)
    Search a 2D Matrix
    Search in Rotated Sorted Array
    Search in Rotated Sorted Array II

    All LeetCode Questions List 题目汇总

  • 相关阅读:
    数据结构串的运算算法
    java文件读取
    我的博客园
    示例 Edit 关闭键盘再显示
    用 Inkscape 做 SVG 给 TPath
    FMX 讯息框 FrameDialog
    让 ListView 在 Android 可回弹
    修正 ColorPanel 选色缓慢问题
    Eclipse Tomcat Project报错:HTTP Status 404错误
    gradle web项目启动报错: java.lang.ClassNotFoundException: org.springframework.web.util.IntrospectorCleanupListener
  • 原文地址:https://www.cnblogs.com/lightwindy/p/8648405.html
Copyright © 2011-2022 走看看