雙指標問題

2021-10-08 18:51:18 字數 1568 閱讀 7301

雙指標一般有兩種case:

1. 快慢指標,一般排序需要使用快慢指標,快慢指標有兩種遊走方式:1.快指標一直往前,不歸位;2. 慢指標移動時,快指標歸位。

2. 收尾指標,一般回文、對稱性判斷需要使用首尾指標

雙指標中,快慢指標問題:

1. 指標一快一慢,快指標按序遍歷陣列,慢指標記錄有效資料位置。

2. 當快指標找到有效資料時,慢指標才往前走一步;

移除元素

給你乙個整數陣列 arr 。請你將陣列中的元素按照其二進位制表示中數字 1 的數目公升序排序。

如果存在多個數字二進位制中 1 的數目相同,則必須將它們按照數值大小公升序排列。

請你返回排序後的陣列

/**

* @param nums

* @param val

* @return

*/var removeelement = function(nums, val)

}return curindex;

};

26. 刪除排序陣列中的重複項

給定乙個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。

不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 o(1) 額外空間的條件下完成。

/**

* @param nums

* @return

*/var removeduplicates = function(nums)

}return curindex+1;

};

167. 兩數之和 ii - 輸入有序陣列

給定乙個已按照公升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。

函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2。

說明:返回的下標值(index1 和 index2)不是從零開始的。

你可以假設每個輸入只對應唯一的答案,而且你不可以重複使用相同的元素。

答題思路:

1.  陣列是有序的,從大到小。 因此當某個值和第乙個值的和大於target時,這個值右邊及本身都不用考慮了,跟誰加都會大於目標值。只用考慮這個值左邊的資料,因此要先找到這個中介值的index。

2.  快慢指標從中介值開始從右往左移動。 慢指標值是當前大值,快指標移動尋找乙個小值與其相加。

若相機大於目標值,則快指標繼續向左移動尋找更小的值;

若相加小於目標值,說明當前固定的大值無匹配小值與之相加可得目標值,因此直接向左移動慢指標換固定值,快指標指回慢指標的下一步,重新開始尋找小值;

若相等,則為返回快慢指標位置。注意要加1,因為題目要求索引不是從0開始

/**

* @param numbers

* @param target

* @return

*/var twosum = function(numbers, target) elseelse if(total > target)else} }

return ;

};

雙指標問題

雙指標可用於多種情景之下,用於查詢陣列中滿足條件的數,coding utf 8 查詢三個數加起來等於0 def findthreesum nums,target 0 nums.sort res for left in xrange nums.len if left 0 and nums left n...

雙指標問題總結

左右指標的常見演算法 雙指標分為兩類,快慢指標和左右指標,前者主要解決鍊錶問題,後者主要解決陣列問題。環問題 public boolean hascycle listnode head listnode fast head listnode slow head while fast null fas...

26 27 雙指標問題

給定乙個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被...