給定排序陣列array和給定值k,不重複列印array中累加和為k的不降序二元與三元組, 比如給定array=,k=10,列印結果為
1 9
2 8
思路如下:
使用兩個指標,left指向最左邊的節點,right指向最右邊的節點,然後我們不斷的向中間壓縮,列印
如果array[left]+array[right]=k 則列印 left++, right--(為什麼,因為要列印非重複二元組,如果left不動,只有right--,則right--後有兩種可能,和以前的一樣,比以前的小,任何一種可能都是不符合條件的)
如果array[left]+array[right]如果array[left]+array[right]>k,則代表要加的值小了,故增大,left++
還有一點要注意
我們要列印的是不重複的二元組
如果是 1 1 1 9
則1 9 會列印三次
怎麼列印一次呢?
那就是判斷 array【left】和array【left-1】是否相等
如果相等,就跳過
如果不等,則可以列印
尤其要注意,列印的是數值不重複的二元三元組
在列印三元組的時候,和二元類似,對陣列進行遍歷,遍歷到i的時候,對i後面的子陣列呼叫列印二元函式
有個情況
x x y z w
分析第乙個x時候,對後面子陣列,xyzw進行二元分析
分析第二個x時候,對後面子陣列進行二元分析
因為要列印非重複的陣列,所以分析第乙個時候,其實就是相當於對後面的子陣列 yzw進行分析
#include using namespace std;
int arr=;
int k=10;
int cur;
bool flag=false;
void printtwoduples(int begin,int end)
{ int left=begin;
int right=end;
while(left
陣列 刪除排序陣列中重複的項
題目要求 給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。解題思路 題目要求不能使用額外的空間,並且複雜度是o 1 所以需要一次遍歷去解決問題。採用雙指標法 乙個...
陣列 刪除排序陣列中的重複項
給定乙個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被...
LeetCode 陣列 刪除排序陣列中的重複項
給定乙個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 o 1 額外空間的條件下完成。示例 給定 nums 0,0,1,1,1,2,2,3,3,4 函式應該返回新的長度 5,並且原陣列 nu...