我是靠谱客的博主 欣喜百褶裙,最近开发中收集的这篇文章主要介绍给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

请必须使用时间复杂度为 O(log n) 的算法。

使用暴力算法

解决思想:

        1、如果数组中的值大于或者等于target,直接return

        2、如果全部遍历完证明target是最大的数,直接插入末尾

如果数值过多,没有那么高效

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();
    }
};

使用二分法算法,适用于大量数据中查找目标值

解决思想:

        1、left=0,right=nums.length,取mid为中间值

        2、如果nums[mid] == target,return mid

        3、如果nums[mid] > target,就说明从mid到right之间的值都不存在目标数值,且 mid 是无效数值,因此right必须比mid还要小才能找到目标数值,也即是right=mid-1;同理,left=mid+1;

         4、一直循环,直到找到mid值并返回或者发现target不在目标数值中

        5、完全循环了一遍(left>right),这时候的left的值就是最接近target且大于target的值(nums[left] > target),因此return left

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

最后

以上就是欣喜百褶裙为你收集整理的给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引的全部内容,希望文章能够帮你解决给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部