<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 兩指針技術 > 原文: [https://www.geeksforgeeks.org/two-pointers-technique/](https://www.geeksforgeeks.org/two-pointers-technique/) 兩個指針確實是一種簡單有效的技術,通常用于在排序數組中搜索對。 給定一個具有 N 個整數的排序數組 A(按升序排序),請查找是否存在任何元素對(A [i],A [j]),以使它們的總和等于 X。 讓我們看看**樸素的解決方案**。 ``` // Naive solution to find if there is a // pair in A[0..N-1] with given sum. bool isPairSum(A[], N, X) { ????for (i = 0; i < N; i++) { ????????for (j = 0; j < N; j++) { ????????????if (A[i] + A[j] == X) ????????????????return true; // pair exists ????????????if (A[i] + A[j] > X) ????????????????break; // as the array is sorted ????????} ????} ????// No pair found with given sum. ????return false; } ``` 該解決方案的時間復雜度為 **`O(n^2)`**。 現在,讓我們看一下兩指技術的工作原理。 我們使用兩個指針,一個代表數組的第一個元素,另一個代表數組的最后一個元素,然后我們將兩個指針處保存的值相加。 如果它們的總和小于 X,則將左指針向右移動;如果它們的總和大于 X,則將右指針向左移動,以便更接近和。 我們一直移動指針,直到得到和為 X。 ``` // Two pointer technique based solution to find // if there is a pair in A[0..N-1] with a given sum. bool isPairSum(A[], N, X) { ????// represents first pointer ????int i = 0; ????// represents second pointer ????int j = N - 1; ????while (i < j) { ????????// If we find a pair ????????if (A[i] + A[j] == X) ????????????return true; ????????// If sum of elements at current ????????// pointers is less, we move towards ????????// higher values by doing i++ ????????else if (A[i] + A[j] < X) ????????????i++; ????????// If sum of elements at current ????????// pointers is more, we move towards ????????// lower values by doing j-- ????????else ????????????j--; ????} ????return false; } ``` 插圖: ![](https://img.kancloud.cn/26/31/2631af93a972fede3b18d6121a683385_297x407.png) 上述解決方案適用于 **`O(n)`** **這是如何工作的?** 該算法基本上使用對輸入數組進行排序的事實。 我們開始求和(最小和最大),然后有條件地移動兩個指針。 當 A [i]和 A [j]的總和小于 X 時,我們將向左移動指針 i。我們不會錯過任何一對,因為總和已經小于 X。右指針 j 的邏輯相同。 **基于兩個指針技術的更多問題。** * [從兩個排序的數組中查找最接近的對](https://www.geeksforgeeks.org/given-two-sorted-arrays-number-x-find-pair-whose-sum-closest-x/) * [在數組中找到總和最接近 x 的對](https://www.geeksforgeeks.org/given-sorted-array-number-x-find-pair-array-whose-sum-closest-x/) * [查找總和為零的所有三胞胎](https://www.geeksforgeeks.org/find-triplets-array-whose-sum-equal-zero/) * [查找一個加和為給定值的三元組](https://www.geeksforgeeks.org/find-a-triplet-that-sum-to-a-given-value/) * [找到一個三元組,使得兩個和等于第三元素](https://www.geeksforgeeks.org/find-triplet-sum-two-equals-third-element/) * [查找四個元素的總和為給定值](https://www.geeksforgeeks.org/find-four-numbers-with-sum-equal-to-given-sum/)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看