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

seo是哪个英文的缩写全能优化型网站

seo是哪个英文的缩写,全能优化型网站,网站搭建公司排行榜,房源信息网这段代码是用于解决LeetCode第33题“搜索旋转排序数组”的Java解法。以下是对该算法思想的中文解释#xff1a; 算法思想 二分查找的基本思路#xff1a; 由于数组是部分有序的#xff08;被旋转过#xff09;#xff0c;我们可以利用二分查找的思想#xff0c;逐步缩小… 这段代码是用于解决LeetCode第33题“搜索旋转排序数组”的Java解法。以下是对该算法思想的中文解释 算法思想 二分查找的基本思路 由于数组是部分有序的被旋转过我们可以利用二分查找的思想逐步缩小搜索范围。但是与普通的二分查找不同这里的数组被旋转过所以需要先判断当前数组的哪个部分是有序的再决定如何更新搜索范围。 判断有序区间 通过比较nums[left]和nums[mid]我们可以确定左半部分或右半部分是否是有序的。如果nums[left] nums[mid]说明左半部分是有序的。如果nums[left] nums[mid]说明右半部分是有序的。 确定目标值在哪个区间 如果左半部分是有序的且目标值target在nums[left]和nums[mid]之间即nums[left] target nums[mid]那么我们将搜索范围缩小到左半部分即更新right mid - 1。如果目标值不在左半部分那么我们将搜索范围缩小到右半部分即更新left mid 1。同理如果右半部分是有序的且目标值target在nums[mid]和nums[right]之间即nums[mid] target nums[right]则搜索范围缩小到右半部分。否则目标值在左半部分因此更新right mid - 1。 返回结果 如果找到目标值则返回它的索引。如果循环结束后仍未找到目标值则返回-1。 Java 代码的逐行解释 class Solution {public int search(int[] nums, int target) {int left 0;int right nums.length - 1;while (left right) {int mid left (right - left) / 2;// 检查中间元素是否为目标值if (nums[mid] target) {return mid;}// 判断左半部分是否有序if (nums[left] nums[mid]) {// 检查目标值是否在左半部分if (nums[left] target target nums[mid]) {right mid - 1;} else {left mid 1;}}// 右半部分是有序的else {// 检查目标值是否在右半部分if (nums[mid] target target nums[right]) {left mid 1;} else {right mid - 1;}}}// 未找到目标值返回-1return -1;} }时间复杂度 由于每次循环都会将搜索区间缩小一半所以时间复杂度为 (O(\log n))符合题目要求的高效查找。 总结 这个算法巧妙地利用了数组的部分有序特性结合二分查找在旋转数组中高效地查找目标值。 为什么如果nums[left] nums[mid]说明右半部分是有序的。 如果nums[left] nums[mid]说明左半区间存在旋转断点而旋转断点之后的子数组都是有序的所以右半部分是有序的。 当nums[left] nums[mid]时确实可以判断左半区间存在旋转断点这意味着左半部分并不是完全有序的。而旋转断点之后的子数组会保持有序状态因此我们可以推断出右半部分是有序的。 这也是为什么在这种情况下我们可以安全地在右半部分进行查找前提是目标值target在右半部分的范围内。反之如果目标值不在右半部分的范围内那么就去左半部分继续搜索。 你的理解完全正确这种判断旋转数组中有序部分的方法是解决这类问题的关键。 为什么这一部分代码片段if (nums[mid] target target nums[right])如果使用判断条件if (nums[mid] target target nums[right])会得到错误的答案 这个问题的核心在于边界条件的不同处理导致的结果差异。让我们仔细分析一下这两个条件的区别以及为什么会得到不同的答案。 代码片段解释 if (nums[mid] target target nums[right])条件比较 原条件if (nums[mid] target target nums[right])错误条件if (nums[mid] target target nums[right]) 原条件的含义if (nums[mid] target target nums[right]) 这个条件的意思是 nums[mid] target目标值 target 要比 nums[mid] 大。target nums[right]目标值 target 小于或等于 nums[right]。 该条件涵盖了目标值在右半部分有序区间内的情况包括target等于nums[right]的情况。例如如果右半部分的元素是[1, 2, 3, 4, 5]而target 5这个条件会成功匹配到5。 错误条件的含义if (nums[mid] target target nums[right]) 这个条件的意思是 nums[mid] target目标值 target 可以等于 nums[mid]。target nums[right]目标值 target 必须严格小于 nums[right]。 这个条件的一个问题是当目标值等于nums[right]时不会满足条件即使target在右半部分有序区间内。例如如果右半部分的元素是[1, 2, 3, 4, 5]而target 5因为5并不小于nums[right] 5这个条件将无法匹配到5。 为什么使用错误条件会得到错误答案 在旋转排序数组中我们必须精确判断目标值是否在有序区间内。如果使用错误条件 if (nums[mid] target target nums[right])就会漏掉当目标值等于右边界元素的情况导致无法找到目标值返回错误的结果如返回-1。 举个例子帮助理解 假设数组是[4, 5, 6, 7, 0, 1, 2]target 2那么 nums[mid] 可能是0nums[right]是2。按照原条件 if (nums[mid] target target nums[right]) 0 2为真2 2也为真条件成立因此可以在右半部分继续查找。 按照错误条件 if (nums[mid] target target nums[right]) 0 2为真但是2 2为假因此条件不成立会错误地调整查找区间。 总结 原条件 if (nums[mid] target target nums[right]) 保证了目标值即使等于右边界元素 nums[right] 时仍然可以正确查找到。而错误条件 if (nums[mid] target target nums[right]) 会遗漏目标值等于右边界的情况从而导致错误答案。
http://www.dnsts.com.cn/news/83285.html

相关文章:

  • 建设网站有哪些短视频
  • 网站建设合同 售后维护期平台和自建网站服务提供者
  • 网站标签设置杭州网站优化多少钱
  • 网站抓取qq做个网站需要多少钱.
  • 网站注册域名与制作个人网站制作 教程
  • 江苏永坤建设有限公司网站网站太花哨
  • 可以做网络攻防的实验的网站安全员考试报名官网
  • 优秀的网站设计方案科技型中小企业怎么认定
  • 做wd网站实训报告总结设计网页布局的常用方法有哪三种
  • 吉林省建设通官方网站竞价网
  • 电子商务网站建设成都小程序定制公司
  • 百度注册域名免费建站家里的网络用哪个公司
  • 方城微网站开发黄岛网站建设价格
  • 织梦网站设计机关单位建设网站 说明
  • 关于备案空壳网站清理通知创可贴设计网
  • 做跨境电商的网站长春火车站到龙嘉机场动车时刻表
  • 创建企业网站经过哪些步骤wordpress手机端兼容自定义页面
  • 网站建设违约责任濮阳市住房和城乡建设局网站
  • 如何让订阅号菜单做微网站株洲 网站建设 公司
  • 关于网站建设的建议百度一下你就知道原版
  • 手工网站和自助建站式网站却别百度推广代理商赚钱吗
  • 国家城乡建设官方网站公司网络组建设计
  • 企业宽带 做网站dw做的网站有缝怎么办
  • 重庆荣昌网站建设公司新网站做优化要准备什么
  • 如何查看网站权重简单网站建设设计
  • 如何做公司网站点击率高网站建设 论文
  • 网站建设的切片是什么江苏省工程建设招标网站
  • 网站制作公司运作方案许昌住房和城乡建设部网站
  • 海南省城乡建设厅网站深圳华强北二手手机
  • 如何做微信网站防封vi手册模板60页