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

做楼盘网站做网站机构图用什么工具

做楼盘网站,做网站机构图用什么工具,建e网360全景制作,网站开发倒计时我们可以总结出二分查找的通用做法和常见变种。二分查找是一种在有序数组中高效查找元素的算法,时间复杂度为 O (log n)。 二分查找的通用模板 二分查找的核心思想是将搜索范围不断缩小一半,直到找到目标元素或确定其不存在。以下是通用模板&#xff1…

我们可以总结出二分查找的通用做法和常见变种。二分查找是一种在有序数组中高效查找元素的算法,时间复杂度为 O (log n)。

二分查找的通用模板

二分查找的核心思想是将搜索范围不断缩小一半,直到找到目标元素或确定其不存在。以下是通用模板:

cpp

int binarySearch(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) {return mid;  // 找到目标} else if (nums[mid] < target) {left = mid + 1;  // 目标在右半部分} else {right = mid - 1;  // 目标在左半部分}}return -1;  // 未找到目标
}

常见变种及处理技巧

1. 查找插入位置(第一个大于等于目标的位置)
  • 特点:返回第一个大于等于target的索引,若所有元素都小于target,则返回数组长度。
  • 关键:循环结束时,left指向第一个大于等于target的位置。

cpp

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 - 1;}}return left;  // 最终left即为插入位置
}
2. 二维矩阵查找
  • 特点:将二维矩阵展开为一维有序数组。
  • 关键:计算一维索引对应的二维坐标。

cpp

bool searchMatrix(vector<vector<int>>& matrix, int target) {int m = matrix.size(), n = matrix[0].size();int left = 0, right = m * n - 1;while (left <= right) {int mid = left + (right - left) / 2;int row = mid / n, col = mid % n;  // 转换为二维坐标if (matrix[row][col] == target) {return true;} else if (matrix[row][col] < target) {left = mid + 1;} else {right = mid - 1;}}return false;
}
3. 查找元素的第一个和最后一个位置
  • 特点:需要两次二分查找,分别找到左边界和右边界。
  • 关键
    • 左边界:第一个大于等于target的位置。
    • 右边界:第一个大于target的位置减 1。

cpp

vector<int> searchRange(vector<int>& nums, int target) {auto lower = [&](int t) {int left = 0, right = nums.size() - 1;while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] < t) {left = mid + 1;} else {right = mid - 1;}}return left;};int first = lower(target);if (first >= nums.size() || nums[first] != target) {return {-1, -1};}int last = lower(target + 1) - 1;  // 右边界return {first, last};
}
4. 旋转排序数组中的查找
  • 特点:数组被旋转后,左右半部分仍有序,但整体无序。
  • 关键:通过比较nums[mid]nums[0]的关系,确定哪半部分有序,再根据有序部分缩小范围。

cpp

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) {return mid;}if (nums[0] <= nums[mid]) {  // 左半部分有序if (target >= nums[0] && target < nums[mid]) {right = mid - 1;  // 目标在左半部分} else {left = mid + 1;  // 目标在右半部分}} else {  // 右半部分有序if (target > nums[mid] && target <= nums.back()) {left = mid + 1;  // 目标在右半部分} else {right = mid - 1;  // 目标在左半部分}}}return -1;
}
5. 寻找旋转排序数组中的最小值
  • 特点:最小值是旋转点,左侧元素都大于右侧元素。
  • 关键:比较nums[mid]与最右侧元素的大小,确定旋转点位置。

cpp

int findMin(vector<int>& nums) {int left = 0, right = nums.size() - 1;while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] <= nums[right]) {  // 最小值在左侧right = mid - 1;} else {  // 最小值在右侧left = mid + 1;}}return nums[left];  // 最终left指向最小值
}

二分查找的关键点总结

  1. 循环条件:通常为left <= right,确保不漏掉最后一个元素。
  2. 中间索引计算:使用mid = left + (right - left) / 2防止整数溢出。
  3. 边界调整
    • 若目标在右侧,left = mid + 1
    • 若目标在左侧,right = mid - 1
  4. 变种处理
    • 查找左边界:找到第一个大于等于target的位置。
    • 查找右边界:找到第一个大于target的位置减 1。
    • 旋转数组:通过比较nums[mid]与边界元素,确定有序部分。

掌握这些技巧后,可以灵活应对各种二分查找的变种问题。

http://www.dtcms.com/wzjs/790092.html

相关文章:

  • 济南街道办网站建设凡科互动修改器
  • 网站如何申请微信支付更换空间对网站的影响
  • 怎么把电脑当服务器做网站现在新手做电商能做好吗
  • 企业wap网站模板甘肃做网站哪家专业
  • 石景山建设网站中小企业网络工程建设
  • 常州网站制作包括哪些wordpress个人保险主题
  • 建行网站注册用户名怎么填中国十大最著名室内设计师
  • 大连市建设部网站官网去哪里做网站安全等级保护级别
  • 时代空间网站中国建设报网站
  • 万网企业网站建设整合营销策划
  • 行业导航类网站模板字体不显示wordpress
  • 马拉松网站建设方案个人类网站类网站
  • 智慧团建网站网址阿里云做电影网站吗
  • 网站建设程序员招聘上海做网站好的公司
  • 宁波建网站哪家好wordpress wp rss
  • 网站建设平台合同模板望野博物馆观后感
  • asp php jsp网站开发wordpress 地址 .html
  • aspcms网站模板80端口被封怎么做网站
  • 做平台还要做网站吗网站平均停留时间
  • 国际物流网站制作模板郑州做花店网站
  • 南昌网站优化方案适合新手做的网站静态
  • 湖南营销型企业网站开发成品网站 修改首页
  • 遵义网站建设方案网站排名优化推广
  • 模块网站和定制网站区别做百度推广怎么做才能有电话
  • 漯河网站建设 付永磊长沙那个手机建网站公司好
  • 中山做百度网站的公司做蛋糕的网站
  • 做公司英文网站妇科在线医生免费咨询
  • 深圳网站设计公司哪家好网站设计常用软件都有哪些
  • 广东建设工程协会网站pdf在线看wordpress
  • 广州市建设工程造价站网站wordpress更改后登录地址