网站建设若干意见,wordpress 编写页面,小程序网站,织梦网站怎么更换模板给定一个 n 个元素有序的#xff08;升序#xff09;整型数组 nums 和一个目标值 target #xff0c;写一个函数搜索 nums 中的 target#xff0c;如果目标值存在返回下标#xff0c;否则返回 -1。
示例 1:
输入: nums [-1,0,3,5,9,12], target 9 输出: 4 解释: 9 出现…给定一个 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
提示
你可以假设 nums 中的所有元素是不重复的。 n 将在 [1, 10000]之间。 nums 的每个元素都将在 [-9999, 9999]之间。
我们定义 target 是在一个在左闭右闭的区间里也就是[left, right] 这个很重要非常重要。
区间的定义这就决定了二分法的代码应该如何写因为定义target在[left, right]区间所以有如下两点
while (left right) 要使用 因为left right是有意义的所以使用 if (nums[middle] target) right 要赋值为 middle - 1因为当前这个nums[middle]一定不是target那么接下来要查找的左区间结束下标位置就是 middle - 1
#include iostream
#include string
#include vector
using namespace std;
class Solution {
public:int search(vectorint nums, int target) {int left 0;int right nums.size() - 1;while (left right) {int mid (left right) / 2;if (nums[mid] target) {left mid 1;} else if (nums[mid] target) {right mid - 1;} else {return mid;}}return -1;}
};
int main() {// vectorint nums {-1,0,3,5,9,12};vectorint nums {5};Solution sl;int res sl.search(nums, 5);cout res endl;return 0;
}