zoukankan      html  css  js  c++  java
  • 搜索插入位置

    LC 搜索插入位置

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

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

    示例 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(vector<int>& nums, int target) {
    		int result = -1;
    		//正常查找到的情况
    		for (int i = 0; i < nums.size(); i++)
    		{
    			if (target == nums[i])
    			{
    				result = i;
    				break;
    			}
    		}
    		//没有查找到的情况
    		if (result == -1)
    		{
    			for (int i = 0; i < nums.size(); i++)
    			{
    				if (nums[i] > target)
    				{
    					result = i;
    					break;
    				}
    			}
                //target值比数组中所有值都要大的情况
    			if (result == -1)
    			{
    				result = nums.size();
    			}
    			
    		}
    
    		return result;
    	}
    };
    

    时间复杂度:O(N)

    空间复杂度:O(1)

    运行情况如下:(太菜了我)

    使用二分查找:

    //二分查找法
    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;
                //可以防止数组上溢出
                mid = Left + (Right - Left)/2;
    			if (nums[mid] == target)
    			{
    				return mid;
    			}
    			else if (target > nums[mid])
    			{
    				Left = mid + 1;
    			}
    			else
    			{
    				Right = mid - 1;
    			}
    		}
    		return Left;
    	}
    };
    

    时间复杂度:O(logN)

    空间复杂度:O(N)

    运行情况:

    吾生也有涯,而知也无涯
  • 相关阅读:
    Django 的 CSRF 保护机制
    uni横向滑动
    uni模板
    下载excel文件,链接,通过按钮点击创建a标签实现
    vue去除input输入框空格适用于搜索查询框
    整理个人笔记Linux的一些常用命令
    简单概括一下JAVA中的ANT的配置
    谈谈JavaIO System对IO的三种支持
    JAVA使用类库对数组和各种Collection容器进行排序
    c语言自行设计矩形类构造函数
  • 原文地址:https://www.cnblogs.com/daimasanjiaomao/p/14092861.html
Copyright © 2011-2022 走看看