Leetcode_Array --35. Search Insert Position [easy]

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

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

Solutions:
当看到排好序的数组的时候就应该想到二分法,因为二分法就是在排好序的数组上操作的

Python

(1)迭代法
class Solution:
    def searchInsert(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        for i in range(len(nums)):   #遍历升序的数组,如果target小于数组中的数,直接返回这个数的index即可
            if target <= nums[i]:
                return i
        return len(nums)   #如果遍历之后都没有结果,说明target大于nums中的所有数,则返回len(nums)

(2)二分法
class Solution:
    def searchInsert(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """    
        L = 0
        R = len(nums)-1
        while L <= R:
            mid = (L+R)//2
            if nums[mid] == target:
                return mid   #如果target在nums中,则直接返回所在的index
            elif nums[mid]> target:
                R = mid-1
            else:
                L = mid+1
        return L   #如果target不在nums中,返回L,target如果小于nums中所有数,L就是索引0,target如果大于nums中所有数,L为nums最后一个元素索引加一
C++

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int L = 0;
        int R = nums.size()-1;
        while(L<=R){
            int mid = (L+R)/2;
            if (target == nums[mid]){
                return mid;
            }
            else if(target > nums[mid]){
                L = mid+1;
            }
            else{
                R = mid-1;
            }
        }
        return L;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值