网站建设app开发公装网站怎么做

张小明 2026/1/13 8:22:23
网站建设app开发,公装网站怎么做,网站开发需要多少钱价格,找人做网站排名优化这篇文章通过一道经典题目#xff1a;LeetCode 153「Find Minimum in Rotated Sorted Array」#xff0c;从零拆解二分搜索的两大模板、区间含义#xff0c;以及为什么会出现各种神秘的条件#xff0c;例如 while (left right)、right mid 这种看起来不直…这篇文章通过一道经典题目LeetCode 153「Find Minimum in Rotated Sorted Array」从零拆解二分搜索的两大模板、区间含义以及为什么会出现各种神秘的条件例如 while (left right)、right mid 这种看起来不直观的写法。leetcode1​题目回顾题意简述有一个严格递增的有序数组被旋转了若干次1 到 n 次。数组中的元素互不相同。要求在 O(log⁡n)O(\log n)O(logn) 时间内找出数组中的最小值。algo1​典型例子[0,1,2,4,5,6,7] → 旋转 4 次 → [4,5,6,7,0,1,2]最小值是 0[11,13,15,17] → 旋转 4 次 → 还是 [11,13,15,17]最小值是 11其实没变leetcode​直观思路找「跳变点」从直觉上看最小值就是从大突然变小的那个位置也就是拐点 / 跳变点在原始升序数组中不存在这种下降旋转之后只会出现一次从大到小的跳变这个位置就是最小值。因此一个自然的想法是默认最小值在 nums[0]。用二分找一个 mid判断它是不是跳变点如果 nums[mid - 1] nums[mid] 且 nums[mid 1] nums[mid]那 mid 就是最小值。否则通过比较决定向左还是向右缩小区间。这个方向在思维上没有问题但在具体实现上会遇到几个麻烦要访问 mid - 1 / mid 1很容易在 mid 0 或 mid n - 1 时越界。条件会比较复杂不够稳定和通用。面试里更推荐的是一套更简洁、更稳定的模板化写法。二分的两套经典模板理解这道题之前先把二分的两种常见模板说清楚。stackoverflow2​模板一存在性查询 while (left right)典型用于“数组里有没有 target返回下标没有就返回 -1”。geeksforgeeks1​伪代码intsearch(vectorintnums,inttarget){intleft0,rightnums.size()-1;while(leftright){intmidleft(right-left)/2;if(nums[mid]target){returnmid;// 找到直接返回}elseif(nums[mid]target){leftmid1;// 排除掉 mid 以及左边}else{rightmid-1;// 排除掉 mid 以及右边}}return-1;// 跑完 while 表示没找到}特征区间是闭区间 [left, right]表示 target 可能存在于其中。nums[mid] target 时在循环内部直接 return。每次更新都是 mid ± 1把 mid 本身从区间中移除。循环结束时一定是 left right因为最后一次 left right 那轮已经在 while 里消耗掉了。要么在那一轮找到并 return要么那一轮之后变成 left right 1 或 right left - 1也就是 left right。stackoverflow1​这就是为什么这种模板的结束状态是 left right 而不是 left right。模板二收缩到一个点 while (left right)典型用于找边界、找最小值、找第一个/最后一个满足条件的位置本题就属于这一类。labuladong1​伪代码通用形式intleft0,rightn-1;while(leftright){intmidleft(right-left)/2;if(某个条件成立){// 最小值在 mid 右侧leftmid1;}else{// 最小值在左侧包括 mid 本身rightmid;}}// 循环结束时left rightreturnleft;// 或 nums[left]特征区间仍然是闭区间 [left, right]表示答案一定在这个区间中。循环目标不是找到就返回而是把区间不断缩小直到只剩一个位置。循环条件是 left right因此退出时必然是 left right。整个过程中始终维护 left right不会出现 left right。w3tutorials1​回到本题为什么是 right mid 而不是 right mid - 1这道题的经典写法你已经写出来了是intfindMin(int*nums,intnumsSize){intleft0,rightnumsSize-1;// 如果本来就是有序且没旋转直接返回最左if(nums[left]nums[right])returnnums[left];while(leftright){intmidleft(right-left)/2;if(nums[mid]nums[right]){// 最小值一定在 mid 右边leftmid1;}else{// 最小值在左边包含 mid 自己rightmid;}}returnnums[left];}关键就在 else 分支这句为什么是 right mid而不是 left mid 或 right mid - 1geeksforgeeks1​思路拆解nums[mid] nums[right]右端 right 所在的这一段是被旋转后的尾部比前面那段小。如果 mid 这一点比 right 还大说明 mid 一定在左边那段较大的递增区间里最小值一定在 mid 右边。所以安全地排除掉 mid 以及其左边写成left mid 1。read.learnyard1​nums[mid] nums[right]也就是 else说明从 mid 到 right 这一段是整体有序且数值偏大的一截最小值不可能在 mid 右边。此时最小值要么在 mid要么在 mid 左边。因此 mid 是一个合法的候选位置不能被排除。为了继续二分缩小区间同时保留 mid只能写right mid。algo1​如果你写成right mid - 1会把 mid 排除掉而这一支的含义正是最小值有可能在 mid排除掉会漏解。left mid在 left right 时mid 可能等于 left这样会导致区间不变形成死循环。从「区间语义」看这件事这一整套写法的核心不在于具体比较而在于始终维护这样一个不变式在任意时刻最小值一定在 [left, right] 这个区间内。于是在排除右侧时要用 left mid 1因为最小值不可能在 mid 以及左边。在排除左侧时要用 right mid 而不是 right mid - 1因为最小值有可能就是 mid。而 while (left right) 配合这样的更新方式保证区间大小严格缩小最终收敛到 left right 这个唯一的候选位置。vultr1​再看一眼完整代码这是你通过题目的 C 代码已经是教科书式写法intfindMin(int*nums,intnumsSize){intleft,right,mid;left0;rightnumsSize-1;if(nums[left]nums[right])returnnums[left];while(leftright){midleft(right-left)/2;if(nums[mid]nums[right])leftmid1;elserightmid;}returnnums[left];}特点先特判完全没旋转的情况首元素小于尾元素直接返回首元素。使用 while (left right)通过比较 nums[mid] 和 nums[right] 进行分割。保证最小值始终在 [left, right]且区间不断缩小到一个点。ducmanhphan.github1​如何从这道题迁移到其它二分题可以给自己几个思考练习1. 什么时候应该用 while (left right) 模板答需要在中途直接返回结果且找不到时要通过 left right 表示区间为空的题。2. 什么时候应该用 while (left right) 模板答要找边界/极值最终答案总是某个边界点的题比如旋转数组的最小值找第一个大于等于 target 的位置找山峰 / 谷底等。towardsdatascience1​3. 写二分前先问自己两件事我的区间 [left, right] 的语义是什么答案一定在里面还是可能不在更新的时候是要排除 mid还是要把 mid 当成候选保留这道题就是典型的答案一定在区间内 需要把 mid 作为候选保留的场景所以用的是 while (left right) right mid 这一套模板。理解了这点后面很多神秘条件自然就顺了。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

工作 网站建设内容泉州网站制作运营商专业

在数字化时代,业务流量的波动性成为企业 IT 运维的核心挑战。电商大促的瞬时订单爆发、短视频平台的热点传播、政务系统的集中访问等场景,都可能引发算力需求的急剧飙升。若按峰值配置固定服务器,会造成非峰值时段的资源浪费;若配…

张小明 2026/1/12 19:55:38 网站建设

国际货代做网站配送系统网站怎么做

深入探索ASP.NET与WCF中的工作流托管 在现代的软件开发中,工作流的应用越来越广泛,尤其是在ASP.NET和WCF(Windows Communication Foundation)环境中。本文将详细介绍如何在ASP.NET应用程序中托管工作流,以及如何使用WCF来托管和调用工作流。 1. 在ASP.NET中托管工作流 …

张小明 2026/1/10 6:38:40 网站建设

邢台公司网站建设wordpress网站前端

KinhDown百度网盘高速下载工具全攻略 【免费下载链接】baidupcs-web 项目地址: https://gitcode.com/gh_mirrors/ba/baidupcs-web 百度网盘作为国内主流的云存储服务,其下载速度限制一直是用户关注的痛点。KinhDown作为一款专业的百度网盘下载加速工具&…

张小明 2026/1/10 1:07:03 网站建设

做外围什么网站有客户文档下载免费网站

还在为手动寻找学术文献PDF而烦恼吗?Zotero插件能够自动从Sci-Hub下载带有DOI的文献PDF文件,让文献管理变得前所未有的简单高效。这款开源工具专为Zotero和Juris-M文献管理软件设计,彻底解放你的双手,让学术研究更加专注。 【免费…

张小明 2026/1/10 6:38:43 网站建设

医院网站加快建设wordpress点击特效

2026年度辽宁省公安机关特殊职位考试录用公务员公告,2026年当年毕业的应届硕士、博士研究生报考网络安全管理职位年龄放宽到35周岁以下。有大学专科及以上文化程度即可!报名申请:12月18日至12月22日考核:专业技能水平测查、笔试、体能测评、面…

张小明 2026/1/10 6:38:43 网站建设

网站建设富有成效佛山免费建站平台

简介 文章以水果分类(水果→苹果→红富士)为比喻,通俗易懂地解释了AI、机器学习、深度学习的关系。人工智能(AI)是让机器像人一样思考的大概念;机器学习(ML)是AI的一种实现方式,通过数据让机器学习规律;深度…

张小明 2026/1/10 6:38:45 网站建设