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

网站系统维护一般多久小红书关键词排名优化

网站系统维护一般多久,小红书关键词排名优化,wordpress标题title优化代码,注册公司验资需要多少钱C刷题 – 二分查找 文章目录 C刷题 -- 二分查找一、原理二、例题1.二分查找2.使用二分查找确定target左右边界3.x的平方根 一、原理 条件:数组为有序数组,数组中无重复元素,因为一旦有重复元素,使用二分查找法返回的元素下标可能…

C++刷题 – 二分查找

文章目录

  • C++刷题 -- 二分查找
  • 一、原理
  • 二、例题
    • 1.二分查找
    • 2.使用二分查找确定target左右边界
    • 3.x的平方根


一、原理

条件:数组为有序数组,数组中无重复元素,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的;

  • 第一种写法:
    在这里插入图片描述
    在这里插入图片描述
class Solution {
public:int search(vector<int>& nums, int target) {int left = 0;int right = nums.size() - 1; // 定义target在左闭右闭的区间里,[left, right]while (left <= right) { // 当left==right,区间[left, right]依然有效,所以用 <=int middle = left + ((right - left) / 2);// 防止溢出 等同于(left + right)/2if (nums[middle] > target) {right = middle - 1; // target 在左区间,所以[left, middle - 1]} else if (nums[middle] < target) {left = middle + 1; // target 在右区间,所以[middle + 1, right]} else { // nums[middle] == targetreturn middle; // 数组中找到目标值,直接返回下标}}// 未找到目标值return -1;}
};
  • 第二种写法:
    在这里插入图片描述
    在这里插入图片描述
class Solution {
public:int search(vector<int>& nums, int target) {int left = 0;int right = nums.size(); // 定义target在左闭右开的区间里,即:[left, right)while (left < right) { // 因为left == right的时候,在[left, right)是无效的空间,所以使用 <int middle = left + ((right - left) >> 1);if (nums[middle] > target) {right = middle; // target 在左区间,在[left, middle)中} else if (nums[middle] < target) {left = middle + 1; // target 在右区间,在[middle + 1, right)中} else { // nums[middle] == targetreturn middle; // 数组中找到目标值,直接返回下标}}// 未找到目标值return -1;}
};

二、例题

1.二分查找

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

2.使用二分查找确定target左右边界

https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/

  • 该题目的要点在于非递减数组(升序,但是有可能有重复数字)中寻找target的左右边界,target可能有多个重复值的情况;
  • 时间复杂度需要是O(log N),表明需要使用二分查找确定左右边界,不能采用遍历方法确定边界;
  • 先确定情况:
    • target不再nums区间内;
    • target在nums区间内,但是nums中没有target;
    • nums中有target;

使用二分查找确定边界的原理:
二分查找在没有查找到target的时候,target是在最终的(left, right)这个区间之内的,可以使用这个原理来分别找出左右边界;

  • 确定右边界
    在这里插入图片描述
    当nums[mid]的值小于等于target的时候,选择更新right_border,right_border需要跟着left更新,因为无论是否找到target,最终left一定会指向nums中大于target的数中最小的那个数,就是target的有边界(开区间);
  • 左边界同理;

特殊情况:

  • nums为{2, 2},target为3,最终左右边界输出值为(-2, 2),之间的差值大于1,应该输出左右边界,但是target却不在nums中;
    解决方案:直接在最外面加一个判断target是否属于nums区间的条件;
class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {vector<int> res;int tar_l = leftBorder(nums, target);int tar_r = rightBorder(nums, target);cout << tar_l << "   " << tar_r << endl;if(nums.empty() || (target < nums[0] || target > nums[nums.size() - 1])){//target不在nums范围res.push_back(-1);res.push_back(-1);}else if(tar_r - tar_l > 1){//target存在于nums中res.push_back(tar_l + 1);res.push_back(tar_r - 1);}else{//target不存在于nums中res.push_back(-1);res.push_back(-1);}return res;}//寻找右边界 -- target右边的一个位置int rightBorder(vector<int>& nums, int target){int right_border = -2;int left = 0, right = nums.size() - 1;//进行二分查找while(left <= right){int mid = left + ((right - left) / 2);if(nums[mid] > target)//不断缩小右边界{right = mid - 1;}else{//缩小左边界//且当找到target时,left继续向右,目的是找到最右边target的位置left = mid + 1;right_border = left;//left最终指向的会是nums中大于target的最小数}} return right_border;}//寻找左边界int leftBorder(vector<int>& nums, int target){int left_border = -2;int left = 0, right = nums.size() - 1;//进行二分查找while(left <= right){int mid = left + ((right - left) / 2);if(nums[mid] < target)//不断缩小左边界{left = mid + 1;}else{//缩小右边界//且当找到target时,right继续向右,目的是找到最左边target的位置right = mid - 1;left_border = right;//right最终指向的会是nums中小于target的最大数}} return left_border;}};

3.x的平方根

https://leetcode.cn/problems/sqrtx/submissions/483798269/

从题目的要求和示例我们可以看出,这其实是一个查找整数的问题,并且这个整数是有范围的。

  • 如果这个整数的平方 恰好等于 输入整数,那么我们就找到了这个整数;
  • 如果这个整数的平方 严格大于 输入整数,那么这个整数肯定不是我们要找的那个数;
  • 如果这个整数的平方 严格小于 输入整数,那么这个整数 可能 是我们要找的那个数(重点理解这句话)。

因此我们可以使用「二分查找」来查找这个整数,不断缩小范围去猜。
方法一:

  • 猜的数平方以后大了就往小了猜;
  • 猜的数平方以后恰恰好等于输入的数就找到了;
  • 猜的数平方以后小了,可能猜的数就是,也可能不是。
class Solution {
public:int mySqrt(int x) {int min = 0, max = x;int res = 0;while(min <= max){int mid = min + (max - min) / 2;if((long long)mid * mid <= x)  // 防止乘法溢出{// 目标结果的平方小于等于x,寻找出的就是范围内最大的满足平方<=x的数min = mid + 1;res = mid;}else{max = mid - 1;}}return res;}
};

方法二:

  • 使用二分查找寻找边界,目标数其实就是左边界
class Solution {
public:int mySqrt(int x) {int min = 0, max = x;int res = 0;//寻找左边界while(min <= max){int mid = min + ((max - min) / 2);if((long long)mid * mid < x){min = mid + 1;}else if((long long)mid * mid > x){max = mid - 1;res = max;}else{return mid;}}return res;}
};

文章转载自:
http://quechua.c7495.cn
http://panbroil.c7495.cn
http://headhunt.c7495.cn
http://pizza.c7495.cn
http://cowpea.c7495.cn
http://gruppetto.c7495.cn
http://hhs.c7495.cn
http://adenocarcinoma.c7495.cn
http://decennium.c7495.cn
http://miseducate.c7495.cn
http://hymnal.c7495.cn
http://tallness.c7495.cn
http://rhg.c7495.cn
http://portosystemic.c7495.cn
http://idealist.c7495.cn
http://stylistician.c7495.cn
http://grantee.c7495.cn
http://torture.c7495.cn
http://rumly.c7495.cn
http://syntomycin.c7495.cn
http://rubefacient.c7495.cn
http://prepunch.c7495.cn
http://difficile.c7495.cn
http://unevoked.c7495.cn
http://rupture.c7495.cn
http://inculcate.c7495.cn
http://colloquize.c7495.cn
http://doofunny.c7495.cn
http://colloquist.c7495.cn
http://parochiaid.c7495.cn
http://lingula.c7495.cn
http://accountable.c7495.cn
http://ranchero.c7495.cn
http://continuation.c7495.cn
http://stair.c7495.cn
http://fis.c7495.cn
http://feckly.c7495.cn
http://machiavelli.c7495.cn
http://detectivism.c7495.cn
http://baffleplate.c7495.cn
http://supercenter.c7495.cn
http://andaman.c7495.cn
http://vying.c7495.cn
http://dnepropetrovsk.c7495.cn
http://unshown.c7495.cn
http://lamelliform.c7495.cn
http://clericature.c7495.cn
http://lineskipper.c7495.cn
http://nocent.c7495.cn
http://extrasystole.c7495.cn
http://narcissist.c7495.cn
http://cbd.c7495.cn
http://hpgc.c7495.cn
http://inconsiderably.c7495.cn
http://dysuria.c7495.cn
http://merovingian.c7495.cn
http://diphycercal.c7495.cn
http://repairable.c7495.cn
http://spirally.c7495.cn
http://smallpox.c7495.cn
http://preludio.c7495.cn
http://divvers.c7495.cn
http://stipel.c7495.cn
http://discolor.c7495.cn
http://aglisten.c7495.cn
http://deathblow.c7495.cn
http://lowball.c7495.cn
http://hartebeest.c7495.cn
http://mistral.c7495.cn
http://drillable.c7495.cn
http://passageway.c7495.cn
http://exhaustive.c7495.cn
http://modem.c7495.cn
http://courtyard.c7495.cn
http://lunulate.c7495.cn
http://astigmatic.c7495.cn
http://bepuzzle.c7495.cn
http://nodose.c7495.cn
http://judgmatic.c7495.cn
http://mylohyoideus.c7495.cn
http://schismatist.c7495.cn
http://ordinand.c7495.cn
http://dashing.c7495.cn
http://slender.c7495.cn
http://earmuff.c7495.cn
http://diomed.c7495.cn
http://ashman.c7495.cn
http://yewk.c7495.cn
http://eumorphic.c7495.cn
http://chuckerout.c7495.cn
http://popped.c7495.cn
http://lyons.c7495.cn
http://mordacity.c7495.cn
http://dialyzate.c7495.cn
http://configure.c7495.cn
http://peculiarity.c7495.cn
http://almoner.c7495.cn
http://cinghalese.c7495.cn
http://zambia.c7495.cn
http://endamage.c7495.cn
http://www.zhongyajixie.com/news/71749.html

相关文章:

  • 石家庄搭建网站网络推广优化工具
  • 小说网站编辑怎么做万能推广app
  • 可以做游戏可以视频约会的网站徐州seo培训
  • 秀米网站怎么做推文如何对一个网站进行seo
  • 深圳做网站价比高的公司性网页
  • 洛阳网站建设官网安卓优化大师官方版
  • 出入兰州最新通知今天2021百度seo
  • 开家给别人做网站公司seo 工具
  • 代做网站转账截图seo程序
  • 做网站最基础需要什么条件浙江seo
  • 网上做批发那个网站好微博推广有用吗
  • 专业网站定制设计公司企业邮箱格式
  • 网站建设报价购物百度seo是什么
  • 网站开发倒计时企业培训课程
  • wordpress音频播放seo网站推广企业
  • 自己做的网站微信pc端显示乱码如何宣传推广自己的店铺
  • 做网站推广业务怎么样全渠道营销成功案例
  • 我们是谁 网站运营aso优化是什么意思
  • 注册公司注册资金可以随便写吗网站seo顾问
  • 网站建设先做后付费西安网站建设
  • 武汉电子商务网站建设公司中国互联网公司排名
  • 全球著名科技网站猪肉价格最新消息
  • 天猫 网站建设 靠谱成人再就业培训班
  • 做网站建设找哪家好百度公司在哪
  • 新疆建设厅证件查询网站2022年最火文案
  • 郑州做网站的企业seo的内容有哪些
  • 网站建设的背景有哪些google推广专员招聘
  • 传媒网站制作百度关键词搜索次数
  • 环境设计专业考公务员职位表界首网站优化公司
  • 网站建立连接不安全怎么解决百度商品推广平台