LeetCode-搜索插入位置

  这道题比较简单,开始想使用find函数,但是对于vector本身没有find函数的容器,需要调用algorithm中的find函数。vector::iterator it = find(vec.begin(),vec.end(),target),若查找失败返回vec.end(),查找成功返回迭代器,但是题目要求返回的是数组中的位置,所以感觉不行。最简单的还是写循环,清晰明了。

#include "iostream"
#include "vector"
using namespace std;
class Solution {
public:
	int searchInsert(vector& nums, int target) {
	    int i=0;
	    while(i

  上面的算法时间复杂度O(n),采用二分查找法可以把时间复杂度降为O(logn).以下为两个二分查找的模板,来自

https://leetcode-cn.com/problems/search-insert-position/solution/hua-jie-suan-fa-35-sou-suo-cha-ru-wei-zhi-by-guanp/

	class Solution {
	public int searchInsert(int[] nums, int target) {
	    int left = 0, right = nums.length - 1; // 注意
	    while(left <= right) { // 注意
	        int mid = (left + right) / 2; // 注意
	        if(nums[mid] == target) { // 注意
	            // 相关逻辑
	        } else if(nums[mid] < target) {
	            left = mid + 1; // 注意
	        } else {
	            right = mid - 1; // 注意
	        }
	    }
	    // 相关返回值
	    return 0;
	}
};



	class Solution {
	public int searchInsert(int[] nums, int target) {
	    int left = 0, right = nums.length; // 注意
	    while(left < right) { // 注意
	        int mid = (left + right) / 2; // 注意
	        if(nums[mid] == target) {
	            // 相关逻辑
	        } else if(nums[mid] < target) {
	            left = mid + 1; // 注意
	        } else {
	            right = mid; // 注意
	        }
	    }
	    // 相关返回值
	    return 0;
	}
};

题解

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

  另外一个模板,注意mid的取法,避免溢出。

//right = nums.size() - 1 ;写法一
int binarySearch(int nums[], int left, int right, int target) {
	int mid;        
	while (left <= right) {
		mid = left + (right - left) / 2;
		if (nums[mid] == target) return mid;
		else if (nums[mid] > target) right = mid - 1;        // 往左区间查询
		else left = mid + 	1;                                 // 往右区间查询
	}
	return -1;                    // 未查询到
}




	//right = nums.size() ;写法二
int binarySearch(int nums[], int left, int right, int target) {
	int mid;        
	while (left < right) {
		mid = left + (right - left) / 2;
		if (nums[mid] == target) return mid;
		else if (nums[mid] > target) right = mid;        // 往左区间查询
		else left = mid + 1;                                 // 往右区间查询
	}
	return -1;                    // 未查询到
}

你可能感兴趣的:(LeetCode-搜索插入位置)