热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LeetCode数组704.二分查找

描述704.二分查找给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target&#x

描述

704. 二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
示例 2:

输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1


思路一:

直接爆力解法
时间复杂度:O(n)
空间复杂度:O(1)

class Solution {
public:int search(vector<int>& nums, int target) {if(nums.size()&#61;&#61;0) return -1; //当输入数组为空则返回-1for(int i&#61;0;i<nums.size();i&#43;&#43;){if(nums[i]&#61;&#61;target){return i;}}return -1;}
};

思路二&#xff1a;二分查找法

class Solution {
public:int search(vector<int>& nums, int target) {if(nums.size()&#61;&#61;0) return -1; //当输入数组为空则返回-1int left &#61; 0;int right &#61; nums.size()-1; //定义target在[left,right],左闭右闭的区间内while(left<&#61;right){int mid &#61; left &#43; ((right-left)/2); //等价与(left&#43;right)/2if(nums[mid]<target){ //在右区间中left &#61; mid &#43; 1;}else if(nums[mid]>target){ //在左区间中right &#61; mid -1;}else{return mid;}}return -1;}

推荐阅读
author-avatar
好人langren_840
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有