@@ -38,7 +38,7 @@ Tag : 「二分」、「异或」
3838或是利用单个元素只有一个(其余成对出现),从头到尾异或一遍,最终结果为单一元素值。
3939
4040代码:
41- ``` Java []
41+ ``` Java
4242class Solution {
4343 public int singleNonDuplicate (int [] nums ) {
4444 int n = nums. length;
@@ -50,7 +50,7 @@ class Solution {
5050}
5151```
5252-
53- ``` Java []
53+ ``` Java
5454class Solution {
5555 public int singleNonDuplicate (int [] nums ) {
5656 int ans = 0 ;
@@ -74,9 +74,9 @@ class Solution {
7474
7575存在这样的二段性,指导我们根据当前二分点 $mid$ 的奇偶性进行分情况讨论:
7676
77- * $mid$ 为偶数下标:根据上述结论,正常情况下偶数下标会与下一值相同 ,因此如果满足该条件,可以确保 $mid$ 之前并没有插入单一元素。正常情况下,此时应该更新 $l = mid,ドル否则应当让 $r = mid - 1,ドル但需要注意这样的更新逻辑,会因为更新 $r$ 时否决 $mid$ 而错过答案,我们可以将否决 $mid$ 的动作放到更新 $l$ 的一侧,即需要将更新逻辑修改为 $l = mid + 1$ 和 $r = mid$ ;
77+ * $mid$ 为偶数下标:根据上述结论,正常情况下偶数下标的值会与下一值相同 ,因此如果满足该条件,可以确保 $mid$ 之前并没有插入单一元素。正常情况下,此时应该更新 $l = mid,ドル否则应当让 $r = mid - 1,ドル但需要注意这样的更新逻辑,会因为更新 $r$ 时否决 $mid$ 而错过答案,我们可以将否决 $mid$ 的动作放到更新 $l$ 的一侧,即需要将更新逻辑修改为 $l = mid + 1$ 和 $r = mid$ ;
7878
79- * $mid$ 为奇数下标:同理,根据上述结论,正常情况下偶数下标会与上一值相同 ,因此如果满足该条件,可以确保 $mid$ 之前并没有插入单一元素,相应的更新 $l$ 和 $r$。
79+ * $mid$ 为奇数下标:同理,根据上述结论,正常情况下奇数下标的值会与上一值相同 ,因此如果满足该条件,可以确保 $mid$ 之前并没有插入单一元素,相应的更新 $l$ 和 $r$。
8080
8181代码:
8282``` Java
@@ -109,7 +109,7 @@ class Solution {
109109
110110而这样的「连续段 偶奇 两两成对」的组合,适合使用「异或」来找相应的成组对象。
111111
112- 实际上,该技巧广泛地应用在 :** 使用邻接表(链式向前星)存无向图时,直接访问「当前边 $e$」所对应的「反向边 $e'$」。这也是为什么在「链式向前星」中我们只需要使用「单链表」并设定 $idx$ 从 0ドル$ 开始进行存图即可:能够满足遍历所有出边,同时如果有访问相应反向边的需求,只需要通过 ` e[i^1] ` 访问即可 。**
112+ 实际上,该技巧广泛地应用在图论存图中 :** 使用邻接表(链式向前星)存无向图时,直接访问「当前边 $e$」所对应的「反向边 $e'$」。这也是为什么在「链式向前星」中我们只需要使用「单链表」并设定 $idx$ 从 0ドル$ 开始进行存图即可:能够满足遍历所有出边,同时如果有访问相应反向边的需求,只需要通过 ` e[i^1] ` 访问 。**
113113
114114对这种存图方式不熟悉的同学,可以看前置 🧀:[ 涵盖所有的「存图方式」与「最短路算法(详尽注释)」] ( https://mp.weixin.qq.com/s?__biz=MzU4NDE3MTEyMA==&mid=2247488007&idx=1&sn=9d0dcfdf475168d26a5a4bd6fcd3505d&chksm=fd9cb918caeb300e1c8844583db5c5318a89e60d8d552747ff8c2256910d32acd9013c93058f&token=381012359&lang=zh_CN#rd ) 。
115115
0 commit comments