当前位置: 首页 > news >正文

营销型外贸网站制作做海报赚钱的网站

营销型外贸网站制作,做海报赚钱的网站,计算机机应用网站建设与维护,医疗保健 网站 备案题目链接 题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出…

题目链接

题目描述

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

请必须使用时间复杂度为 O(log n) 的算法。

示例 1:

输入: nums = [1,3,5,6], target = 5
输出: 2

示例 2:

输入: nums = [1,3,5,6], target = 2
输出: 1

示例 3:

输入: nums = [1,3,5,6], target = 7
输出: 4

提示:

  • 1 <= nums.length <= 104
  • -104 <= nums[i] <= 104
  • nums 为 无重复元素 的 升序 排列数组
  • -104 <= target <= 104

分析思路

  • 前提有序数组+数组中无重复元素(一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的)
  • 确认方法:二分查找法
  • 注:二分法中关于区间的定义一般为两种——“左闭右闭[left, right]” 或 “左闭右开[left, right)”

代码实现

实现一:左闭右闭

class Solution {
public:int searchInsert(vector<int>& nums, int target) {int left = 0;int right = nums.size() - 1;  // 左闭右闭while (left <= right){  // 当left==right,区间[left, right]依然有效,所以用<=int middle = left + ((right - left) / 2);  // 防止溢出if (nums[middle] > target){ // target在左区间 [left, middle-1]right = middle - 1;} else if (nums[middle] < target){ // target在右区间 [middle+1, right]left = middle + 1;} else { // nums[middle] == targetreturn middle; // 找到目标值,直接返回下标}}// 1.目标值在数组所有元素之前 [0, -1]// 2.目标值插入数组中的位置 [left, right]// 3.目标值在数组所有元素之后 [nums.size(), nums.size()-1]return right + 1;// return left;}
};

实现二:左闭右开

class Solution {
public:int searchInsert(vector<int>& nums, int target) {int left = 0;int right = nums.size();  // 左闭右开while (left < right){  // 当left==right,区间[left, right)无效int middle = left + ((right - left) / 2);  // 防止溢出// int middle = left + ((right - left) >> 1); // >>按位右移运算符,等同于变量除以2if (nums[middle] > target){ // target在左区间 [left, middle)right = middle;} else if (nums[middle] < target){ // target在右区间 [middle+1, right)left = middle + 1;} else { // nums[middle] == targetreturn middle; // 找到目标值,直接返回下标}}// 1.目标值在数组所有元素之前 [0, 0)// 2.目标值插入数组中的位置 [left, right)// 3.目标值在数组所有元素之后 [nums.size(), nums.size() )return right;// return left;}
};

参考来源:代码随想录 

补充:位移运算符为何能将数据乘以或除以 2^{n} ?

按位右移运算符(>>)将变量除以2^{n};按位左移运算符(<<)将变量乘以2^{n}

例如:

变量num的值为16,其二进制表示为10000。将num右移1位,结果为01000,即8,这相当于将其减半;将num右移两位,变成了00100,即4,相当于计算num的1/4。向左移1位时结果为100000,即32,向左移两位的结果为1000000,即64,相当于计算num的2倍和4倍。

http://www.bjxfkj.com.cn/article/108021.html

相关文章:

  • 做网站工作室数据分析报告
  • 专门做任务的网站吗做网站做
  • 网站改版提案wordpress中文文章排版插件
  • 专业建站网站2345百度百科
  • 网站的栏目结构简图怎么做个人网站建设价格套餐
  • 相对于网站根目录的的绝对路径wordpress 插件原理
  • 建行企业网站网络规划设计 网站建设
  • 长沙网站排名团队网站结构优化
  • wordpress如何导航网站模板企业网站建设案例有哪些公司
  • 网站加视频如何制作自己的网站链接视频
  • 建网站开发费用哪些网站做电商比较好
  • 网站的自动登录是怎么做的查询网站旗下域名
  • 网站资源库建设报价现在还用dw做网站设计么
  • 做航模的网站信用中国 网站 建设方案
  • 用哪个做网站demowordpress自豪的采用
  • 七彩建设集团官方网站网络服务类型有哪几种
  • 做企业网站服务器深圳团购网站设计价格
  • 本地郑州网站建设营销网站定制公司
  • 贵阳网站建设托管谁帮58同城做的网站吗
  • php 微信 网站开发如何搭建购物平台
  • 网站首页图片大全装修网站开发思路
  • 做告状网站高德地图在海外能用吗
  • 怎么做自己的html网站宣化网站制作公司
  • 做配色的网站竭诚网络网站建设开发
  • 网站界面设计考试建设项目验收公示网站
  • 访客留言网站云主机网站源码
  • 建设网站图片大全做框架表格网站
  • 光谷网站建设公司响应式网站 英语
  • 网上免费做网站建设厅电工证查询网站
  • 网站建设与管理试卷中国最新军事新闻50字