不重複列印排序陣列中相加和為給定值的所有二元三元組

2021-07-09 12:34:34 字數 1017 閱讀 1429

給定排序陣列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...