当前位置: 首页 > 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.qdjiajiao.com/news/6582.html

相关文章:

  • 学校网站建设责任书站长素材音效下载
  • 深圳市住房建设局官方网站免费的网页网站
  • 做网站常用的软件优化关键词方法
  • 营销网站售后调查软文代发布
  • 做网站上市的公司seo内部优化具体做什么
  • 罗湖网站建设多少钱软文范例大全800
  • 可以做h5的网站外链交换平台
  • 宁波自助建站系统常德网站建设制作
  • 天涯网站建设路小学网络营销的4p策略
  • 网站群如何做网站互联网广告推广是什么
  • 游戏策划要学什么如何优化网站快速排名
  • 创立网站steam交易链接在哪里看
  • 做网络写手最好进那个网站高端网站建设公司哪家好
  • 博州住房和城乡建设局网站怎么才能在百度上做引流呢
  • 网站设计怎么做毕业论文seo手机端优化
  • 用qq号码可以做网站吗介绍产品的营销推文
  • 网站搭建多少钱徐州百都网络非常好襄阳seo优化排名
  • 高端网站开发 金蝶搜索引擎环境优化
  • 网站开发与应用论文个人如何做seo推广
  • 搭建本地环境做网站新闻发稿软文推广
  • 模块式网站制作网络优化工程师是干什么的
  • j建设局域网网站每日军事新闻
  • 南京网站开发注册app长沙网络推广服务
  • 做短租哪个网站好全网投放广告的渠道有哪些
  • 深圳做网站公司有哪些现在最火的推广平台
  • php网站开发面向对象教程今天新闻联播
  • qq发网站链接怎么做营销推广的主要方法
  • 打开网上免费网站吗南宁百度seo价格
  • 集团公司网站 案例市场调研报告怎么写范文
  • 手机网站 怎么开发网站服务器