力扣704. 二分查找(顺序查找)

力扣704. 二分查找

https://leetcode-cn.com/problems/binary-search/

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

思路:有序,就是顺序查找,最简便的是二分查找

我的VS代码:

#include "stdafx.h"
#include<vector>
using namespace std;
class Solution {
public:
	/**
	* @param nums: The integer array.
	* @param target: Target to find.
	* @return: The first position of target. Position starts from 0.
	*/
	int binarySearch(vector<int> &nums, int target) {
		// write your code here
		//有序数组,二分查找
		//二分查找也称为折半查找,每次都能将查找区间减半,这种折半特性的算法时间复杂度为 O(logN)
		if (nums.size()==0)
		{
			return -1;
		}
		int low = 0;
		int high = nums.size()-1;
		int mid = 0;
		while (low <= high)
		{
			mid = low+(high-low) / 2;
			if (target == nums[mid])
			{
				return mid;
			}
			else if(target > nums[mid])
			{
				low = mid+1;
			}
			else
			{
				high = mid-1;
			}
		}
		return -1;
	}
};

int main()
{
	Solution s;
	vector<int>nums;
	nums.push_back(1); nums.push_back(2); nums.push_back(3); nums.push_back(3); 
	nums.push_back(4); nums.push_back(5); nums.push_back(10); 
	auto result=s.binarySearch(nums,3);
	return 0;
}

力扣参考答案:

方法:二分查找
二分查找是一种基于比较目标值和数组中间元素的教科书式算法。

如果目标值等于中间元素,则找到目标值。
如果目标值较小,继续在左侧搜索。
如果目标值较大,则继续在右侧搜索。

在这里插入图片描述
算法:

初始化指针 left = 0, right = n - 1。
当 left <= right:
比较中间元素 nums[pivot] 和目标值 target 。
如果 target = nums[pivot],返回 pivot。
如果 target < nums[pivot],则在左侧继续搜索 right = pivot - 1。
如果 target > nums[pivot],则在右侧继续搜索 left = pivot + 1。

在这里插入图片描述

在这里插入图片描述

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

作者:LeetCode
链接:https://leetcode-cn.com/problems/binary-search/solution/er-fen-cha-zhao-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

作者:LeetCode
链接:https://leetcode-cn.com/problems/binary-search/solution/er-fen-cha-zhao-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

发布了23 篇原创文章 · 获赞 0 · 访问量 137

猜你喜欢

转载自blog.csdn.net/qq_35683407/article/details/105419439