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

中国山东建设监理协会官方网站怀柔建设网站

中国山东建设监理协会官方网站,怀柔建设网站,学生网站建设的基本流程,wordpress首页制作幻灯片Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;塞尔达将和大家一起做几道二分查找算法算法题 ~ ❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️ 澄岚主页&#xff1a;椎名澄嵐-CSDN博客 算法专栏&#xff1a;★ 优选算法100天 ★_椎名澄嵐的博客-CSDN博客…

Ciallo~(∠・ω< )⌒☆ ~ 今天,塞尔达将和大家一起做几道二分查找算法算法题 ~

❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️

澄岚主页:椎名澄嵐-CSDN博客

算法专栏:★ 优选算法100天 ★_椎名澄嵐的博客-CSDN博客

❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️

目录

壹  力扣704 - 二分查找

1.1 题目

1.2 算法解析

1.3 撰写代码

1.4 朴素二分查找模板

贰  力扣34 - 在排序数组中查找元素的第⼀个和最后⼀个位置

2.1 题目

2.2 算法解析

2.3 撰写代码

2.4 二分查找模板

叁  力扣35 - 搜索插入位置

3.1 题目

3.2 算法解析

3.3 撰写代码

肆  力扣69 - x的平方根

4.1 题目

4.2 算法解析

4.3 撰写代码

伍  力扣852 - 山峰数组的峰顶索引

5.1 题目

5.2 算法解析

5.3 撰写代码

陆  力扣162 - 寻找峰值

6.1 题目

6.2 算法解析

6.3 撰写代码

柒  力扣153 - 寻找旋转排序数组中的最小值

7.1 题目

7.2 算法解析

7.3 撰写代码

捌  力扣LCR173 - 点名

8.1 题目

8.2 算法解析

8.3 撰写代码

~ 完 ~


壹  力扣704 - 二分查找

1.1 题目

704. 二分查找 - 力扣(LeetCode)

1.2 算法解析

首先想到的暴力解法就是遍历数组,找到target,时间复杂度为O(N),那么有没有更快速的方法呢~

二分查找算法适用于有二段性的区间,比如一个值的左边比这个值小,右边比此值大,根据数学期望,中间值为最佳~

1.3 撰写代码

class Solution {
public:int search(vector<int>& nums, int target) {int left = 0, right = nums.size() - 1;while(left <= right){// 防止溢出int mid = left + (right - left) / 2;if (nums[mid] > target) right = mid - 1;else if (nums[mid] < target) left = mid + 1;else return mid;}return -1;}
};

1.4 朴素二分查找模板

while(left <= right)
{int mid = left + (right - left) / 2;if (......) right = mid - 1;else if (......) left = mid + 1;else return ......;
}

贰  力扣34 - 在排序数组中查找元素的第⼀个和最后⼀个位置

2.1 题目

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)

2.2 算法解析

2.3 撰写代码

class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {// 处理数组为空if(nums.size() == 0) return {-1, -1};// 1. 二分左端点int begin = 0;int left = 0, right = nums.size() - 1;while(left < right){int mid = left + (right - left) / 2;if(nums[mid] < target) left = mid + 1;else right = mid;}// 判断是否有结果if(nums[left] != target) return {-1, -1};else begin = left; // 记录结果// 2. 二分右端点left = 0, right = nums.size() - 1;while(left < right){int mid = left + (right - left + 1) / 2;if(nums[mid] <= target) left = mid;else right = mid - 1;}// 左端点有结果右端点一定有结果return {begin, right};}
};

2.4 二分查找模板

1. 二分左端点模板

while(left < right)
{int mid = left + (right - left) / 2;if(......) left = mid + 1;else right = mid;
}

2. 二分右端点模板

while(left < right)
{int mid = left + (right - left + 1) / 2;if(......) left = mid;else right = mid - 1;
}

叁  力扣35 - 搜索插入位置

3.1 题目

35. 搜索插入位置 - 力扣(LeetCode)

3.2 算法解析

3.3 撰写代码

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

肆  力扣69 - x的平方根

4.1 题目

69. x 的平方根 - 力扣(LeetCode)

4.2 算法解析

此题需要考虑边界情况, <1单独处理~

并且数据过大有溢出风险,要用long long来存~

4.3 撰写代码

class Solution {
public:int mySqrt(int x) {if(x < 1) return 0; // 边界情况~int left = 1, right = x;while(left < right){long long mid = left + (right - left + 1) / 2; // 防溢出if(mid * mid <= x) left = mid;else right = mid - 1;}return left;}
};

伍  力扣852 - 山峰数组的峰顶索引

5.1 题目

852. 山脉数组的峰顶索引 - 力扣(LeetCode)

5.2 算法解析

5.3 撰写代码

class Solution {
public:int peakIndexInMountainArray(vector<int>& arr) {int left = 1, right = arr.size() - 2;while(left < right){int mid = left + (right - left + 1) / 2;if(arr[mid] > arr[mid - 1]) left = mid;else right = mid - 1;}return left;}
};

陆  力扣162 - 寻找峰值

6.1 题目

162. 寻找峰值 - 力扣(LeetCode)

6.2 算法解析

无序数组有二段性时也可以使用二分查找算法~

6.3 撰写代码

class Solution {
public:int findPeakElement(vector<int>& nums) {int left = 0, right = nums.size() - 1;while (left < right){int mid = left + (right - left) / 2;if (nums[mid] > nums[mid + 1]) right = mid;else left = mid + 1;}return left;}
};

柒  力扣153 - 寻找旋转排序数组中的最小值

7.1 题目

153. 寻找旋转排序数组中的最小值 - 力扣(LeetCode)

7.2 算法解析

7.3 撰写代码

class Solution {
public:int findMin(vector<int>& nums) {int left = 0, right = nums.size() - 1;int n = nums[right];while (left < right){int mid = left + (right - left) / 2;if (nums[mid] > n) left = mid + 1;else right = mid;}return nums[left];}
};

捌  力扣LCR173 - 点名

8.1 题目

LCR 173. 点名 - 力扣(LeetCode)

8.2 算法解析

8.3 撰写代码

class Solution {
public:int takeAttendance(vector<int>& records) {int left = 0, right = records.size() - 1;while (left < right){int mid = left + (right - left) / 2;if (records[mid] == mid) left = mid + 1;else right = mid;}if(records[left] == left) return left + 1;else return left;}
};

~ 完 ~

http://www.yayakq.cn/news/231385/

相关文章:

  • 北京建设部网站 信息中心微信公众号文章怎么转wordpress
  • 怎样创建一个网站平台夜深人不静免费看高清
  • 网站建设运营服务商买了网站模版怎么做
  • 青岛百度网站排名网页设计教程一个页面的完全制作
  • 邢台建手机网站流程网站跟网页有什么区别
  • 滨海新区城市建设档案馆网站建立网站软件
  • 网站的动态文字是怎么做的织梦网站怎么做404页面
  • 网站菜单素材人像摄影作品网站
  • 建设厂招工信息网站专做会议推广的网站
  • 宁波网站推广方式怎么样重庆网站seo分析
  • 做餐饮类网站用哪个程序做汽车导航仪在什么网站找客户
  • 有哪些做的比较好的网站长沙建一个网站多少钱
  • 网站开发验收资料园区二学一做网站
  • 国内做航模比较好的网站seo优化官网
  • 专业自适应网站建设极速建站百度seo快速提升排名
  • 大数据网站开发工程师网站建设的方式有哪些内容
  • 太原企业网站排名wordpress过滤器
  • 安徽平台网站建设公司阿里网站导航怎么做的
  • 辽宁建设工程信息网站wordpress删去RSS
  • 商务网站建设论文西安网站搭建
  • 网站添加邮件发送怎么做网络设计院
  • 长沙做网站微联讯点不错国内十大网站建设公司排名
  • 沈阳做网站一诚金网络专业有哪些做汽配的网站
  • 网站设计与建设代码在线推广网站的方法有哪些
  • 网站开发Z亿玛酷1订制工业设计专业作品集
  • 做网站的公司吉林源码是否为wordpress模板
  • 河北衡水建设网站公司电话wordpress 头部菜单
  • 同性男做性视频网站东莞公司建设网站制作
  • 网站数据不变重新安装wordpresswordpress 标签固定链接
  • 中文网站建设小组微信小程序开发实训报告