LeetCode Binary Search Summary 二分搜索法小结
二分查找法作为一种常见的查找方法,将原本是线性时间提升到了对数时间范围,大大缩短了搜索时间,具有很大的应用场景,而在 LeetCode 中,要运用二分搜索法来解的题目也有很多,但是实际上二分查找法的查找目标有很多种,而且在细节写法也有一些变化。之前有网友留言希望博主能针对二分查找法的具体写法做个总结,博主由于之前一直很忙,一直拖着没写,为了树立博主言出必行的正面形象,不能再无限制的拖下去了,那么今天就来做个了断吧,总结写起来~ (以下内容均为博主自己的总结,并不权威,权当参考,欢迎各位大神们留言讨论指正)
第一类: 需查找和目标值完全相等的数
这是最简单的一类,也是我们最开始学二分查找法需要解决的问题,比如我们有数组 [2, 4, 5, 6, 9],target = 6,那么我们可以写出二分查找法的代码如下:
会返回3,也就是 target 的在数组中的位置。注意二分查找法的写法并不唯一,主要可以变动地方有四处:
第一处是 right 的初始化,可以写成 Binary.com有多好? Binary.com有多好? nums.size() 或者 nums.size() - 1。
第二处是 left 和 right 的关系,可以写成 left < right 或者 left
第三处是更新 right 的赋值,可以写成 right = mid 或者 right = mid - 1。
第四处是最后返回值,可以返回 left,right,或 right - 1。
第二类: 查找第一个不小于目标值的数,可变形为查找最后一个小于目标值的数
这是比较常见的一类,因为我们要查找的目标值不一定会在数组中出现,也有可能是跟目标值相等的数在数组中并不唯一,而是有多个,那么这种情况下 nums[mid] == target 这条判断语句就没有必要存在。比如在数组 [2, 4, 5, 6, 9] 中查找数字3,就会返回数字4的位置;在数组 [0, 1, 1, 1, 1] 中查找数字1,就会返回第一个数字1的位置。我们可以使用如下代码:
最后我们需要返回的位置就是 right 指针指向的地方。在 C++ 的 STL 中有专门的查找第一个不小于目标值的数的函数 lower_bound,在博主的解法中也会时不时的用到这个函数。但是如果面试的时候人家不让使用内置函数,那么我们只能老老实实写上面这段二分查找的函数。
这一类可以轻松的变形为查找最后一个小于目标值的数,怎么变呢。我们已经找到了第一个不小于目标值的数,那么再往前退一位,返回 right Binary.com有多好? - 1,就是最后一个小于目标值的数。
第三类: 查找第一个大于目标值的数,可变形为查找最后一个不大于目标值的数
这一类可以轻松的变形为查找最后一个不大于目标值的数,怎么变呢。我们已经找到了第一个大于目标值的数,那么再往前退一位,返回 right - 1,就是最后一个不大于目标值的数。比如在数组 [0, 1, 1, 1, 1] 中查找数字1,就会返回最后一个数字1的位置4,这在有些情况下是需要这么做的。
第四类: 用子函数当作判断关系(通常由 mid 计算得出)
这是最令博主头疼的一类,而且通常情况下都很难。因为这里在二分查找法重要的比较大小的地方使用到了子函数,并不是之前三类中简单的数字大小的比较,比如 Split Array Largest Sum 那道题中的解法一,就是根据是否能分割数组来确定下一步搜索的范围。类似的还有 Guess Number Higher or Lower 这道题,是根据给定函数 guess 的返回值情况来确定搜索的范围。对于这类题目,博主也很无奈,遇到了只能自求多福了。
第五类: 其他(通常 target 值不固定)
有些题目不属于上述的四类,但是还是需要用到二分搜索法,比如这道 Find Peak Element,求的是数组的局部峰值。由于是求的峰值,需要跟相邻的数字比较,那么 target 就不是一个固定的值,而且这道题的一定要注意的是 right 的初始化,一定要是 Binary.com有多好? nums.size() - 1,这是由于算出了 mid 后,nums[mid] 要和 nums[mid+1] 比较,如果 right 初始化为 nums.size() 的话,mid+1 可能会越界,从而不能找到正确的值,同时 while 循环的终止条件必须是 left < right,不能有等号。
类似的还有一道 H-Index II,这道题的 target 也不是一个固定值,而是 len-mid,这就很意思了,跟上面的 nums[mid+1] 有异曲同工之妙,target 值都随着 mid 值的变化而变化,这里的right的初始化,一定要是 nums.size() - 1,而 while 循环的终止条件必须是 left
其实仔细分析的话,可以发现其实这跟第四类还是比较相似,相似点是都很难 -.-. ,第四类中虽然是用子函数来判断关系,但大部分时候 mid 也会作为一个参数带入子函数进行计算,这样实际上最终算出的值还是受 mid 的影响,但是 right 却可以初始化为数组长度,循环条件也可以不带等号,大家可以对比区别一下~
如何在Binary.com中使用价格操作进行交易
条形图和烛台图包含相同的价格数据(OHLC)
正如我已经提到的,价格行动交易员不喜欢其他指标。 其原因主要是指标的延迟。 然而,支撑线和阻力线可能是期望的。
这是因为在触及支撑/阻力位之后,价格的行为通常是可以预测的。 这是价格动作交易者如何阅读图表的示例。 我们这里有支持热线。 您会看到不错的价格在这个水平上有何反应。 1号是看涨的pinbar。 进入多头(买入)位置是一个明确的信号。 2号是看涨吞没烛台的形态。 这也是买入GBPUSD的信号。 Binary.com有多好? 这就是阅读价格行为,确定关键的支撑和阻力水平以及知道如何对重复的价格模式(如烛台形态)做出反应。
价格行动交易者专注于重要价格水平上的价格行为
使用“袖珍期权价格行动”进行有效交易需要什么?
随着时间的流逝,您将更加直观地意识到价格达到特定趋势点时的行为。 您将对绘制趋势线和大致识别趋势更有信心。 您将看到先前对价格走势产生阻力的水平在突破后成为支撑。
分析水平支撑阻力位和动态趋势线
使用较高的时间范围来确定关键级别
您可以在任何时间范围内使用价格操作。 使用较大的时间间隔可以看到具有主要和最重要的价格水平的所谓全局图。 然后,您可以使用较低的时间范围来确定确切的位置入口点。
使用价格行为可以使您更好地了解价格走势
剩下要做的就是为自己进行交易和检查价格行动。 不过,如果您使用的是真钱,则应格外小心。 即使这是一种可靠且有用的策略,价格行动交易也不是没有风险的。 时刻准备面对损失。
Binary.com有多好?
故事发生在2080年的东京,人类科技急速发展,已经产生了机器人,并且能代替人类进行社会劳动生产、维持治安。
既然有了机器人,那人工智能的出现也在所难免,而机器人一旦有自我意识,自然会对自己存在的价值产生思考,必然不愿沦落为只是服从命令的傀儡 I, Robot即视感 。这种情况的出现,只有两种可能,一是革命,二是改革。所以人类为了抵制机器人的暴力起义,奋力反抗。
另外本作制作人是名越稔洋,其代表作为《如龙》,即便是名越稔洋的名号也没能挽救该作的销量,实在可惜。
画面
不得不说,游戏的优化十分之好,我的渣渣显卡开中级配置也能流畅运行。游戏中既有开阔的大场景,也有狭窄的下水道,但画风不会太阴暗,恰到好处,玩久不会让人觉得视觉疲劳。另外人设方面也有值得赞赏的一点,人物设定东方人的审美,既有 说话不经大脑 的日本人,也有带着口音的英国人 还是觉得英国口音好好听 ,到后面还会加入一个机器人。哦对,还有个中国妹纸。
操作
战斗时射击感没有什么鞭笞之处,倒是几个小游戏操作有点蛋疼,比如驾驶摩托艇那里,有点酸爽,一失败就重来 好吧我失败三次才过 。进入掩体、翻过掩体以及跑步都是同一个键,有时按起来真是有点气人。
系统
每个角色都有一个自己的武器,并且可以像RPG游戏那样进行升级强化,角色也有插槽,可以在商店购买技能装备上去。AI的智商还是挺高的,懂得使用掩体,而且很难打死,一般来说爆头或打腿,能完美爆头的话,敌人会陷入混乱状态,只能侦查出机器体,会对机器体进行攻击。敌方杂兵的种类尚可,BOSS战也充满挑战,可玩性还是很大的。噢还有队友亲密度系统,每个章节选择的队友不同,结局也会不同。然后是那蛋疼的音控系统,只能说idea很美好,现实很残酷 于是我把音控关了 。
剧情
上面的游戏介绍其实也讲的差不多了,角色性格上的塑造也很成功,渲染的很到位,尽管一些设定上有点反人类 雷人 ,但是有何妨呢, 射得爽 就行了。
挑戰與方案
Z
最新無紙化雲端文件管理及移動工作方案
[Binary Tool V.10] 企業管理系統採用最新的雲端技術﹐令企業可以輕鬆升級為無紙化文件管理﹐減少處理及管理文件的時間浪費﹐而且能支援手機版﹐令你隨時隨地﹐彈指之間輕鬆取得所要數據及進行工作。
員工培訓吃力﹐團體經驗難以累積﹐企業成長停滯
輕鬆製作自己的企業 百科全書
[Binary Tool V.Binary.com有多好? 10] 企業管理系統經我們多年的精心設計﹐能幫助企業自動累積及整理整個團隊的工作經驗以及重要數據﹐製成企業的電子百科全書﹐電子導師﹐令新人快速的學習及成長﹐ 大大推動企業的成長增度 。
有效管理客戶資料
加強業務團隊合 作
[Binary Tool V.10] 企業管理系統能能有效地協助員工管理及分析客戶資料﹐提高命成功率以回單率。在負責同事休假期間﹐可以方便地安排其他同事幫手跟進。
自動化最新最全面的
財務報告
[Binary Tool V.10] 企業管理系統能為你自動化統計及分析財務報告﹐上一秒賣出一件產品﹐下一秒就更新在你的財務報表上﹐令你在資訊上取得壓倒性優勢﹐得以運籌帷幄﹐決勝千里。
[Binary Tool V.10] 企業管理系統能為你度身設定不同的流程管理﹐可在不同的階段設定關卡及電子審批權限﹐而且能自動發出操作提醒﹐以及警報機制﹐令公司的所有工作流程有記錄以及可追蹤﹐大大流少出錯的損失。
經理老板成為公司的
發展的瓶頸
[Binary Tool V.Binary.com有多好? 10] 企業管理系統能有效地設定不同的權限﹐ 令繁雜的工作變得簡單且易於分配 ﹐突破工作流程上的瓶頸。
[Binary Tool V.10] 企業管理系統重新定義你對ERP系統的認識﹐ 它能令一切的工作變得更簡單 。
Binary Tool V.10.0
更多問題及方案
無法有效地激勵同事的主動性﹐積極性 Binary.com有多好?
建基於穩固的學術理論﹐我們的HRM揉合了遊戲化機理﹐令您的團隊更有奮鬥的目標以及提高士氣。
透過我們的系統工具﹐員工出勤﹑假期﹑出糧﹑MPF﹑最低工資﹑雜費﹑行政等等瑣碎的工作可以高效處理﹐一人身兼數職也游刃有餘。
做好了網站﹐但暴光率不高?
我們的工具可以幫你很快地完成網站的優化工作(SEO)﹐有助提升在YAHOO﹑GOOGLE等搜尋引擎的排名﹐增加暴光率。
曾經想用ERP升級公司
我們系統的操作介面由一支專業的程式介面(UI)計劃人員設計﹐方便且易用﹐介面設計新穎﹐只要簡單培訓﹐就能使用。