在C++中查詢三元組,使得兩數之和等於第三個數


假設有一個包含n個數字的陣列。我們必須找到三個數字,使得其中兩個元素的和等於第三個元素。例如,如果陣列是 [5, 32, 1, 7, 10, 50, 19, 21, 2],則輸出將是 21, 2, 19。如果沒有找到這樣的元素,則顯示該訊息。

為了解決這個問題,我們將遵循以下步驟:

  • 對給定陣列進行排序

  • 然後從最後一個元素開始固定最大元素,並遍歷陣列以查詢另外兩個數字,這兩個數字之和等於第三個元素。

  • 使用兩個指標j和k,j從第一個元素開始,k從最後一個元素開始,從i-1中找到最小的兩個數,從而找到剩餘的兩個數中最大的數。

  • 如果兩個數字的加和仍然小於Arr[i],那麼我們必須增加兩個數字的和,從而增加j指標,以便增加Arr[j] + Arr[k]的值。

  • 如果兩個數字的加和大於Arr[i],那麼我們需要減小兩個數字的和,從而減小k指標,以便減小Arr[j] + Arr[k]的總值。

示例

線上演示

#include<iostream>
#include<algorithm>
#define N 5
using namespace std;
void getValueTriplet(int arr[], int n) {
   sort(arr, arr + n);
   for (int i = n - 1; i >= 0; i--) {
      int j = 0;
      int k = i - 1;
      while (j < k) {
         if (arr[i] == arr[j] + arr[k]) {
            cout << "The numbers are " << arr[i] << " " << arr[j] << " " << arr[k] << endl;
            return;
         }
         else if (arr[i] > arr[j] + arr[k])
         j += 1;
         else
         k -= 1;
      }
   }
   cout << "No such triplet exists";
}
int main() {
   int arr[] = { 5, 32, 1, 7, 10, 50, 19, 21, 2 };
   int n = sizeof(arr) / sizeof(arr[0]);
   getValueTriplet(arr, n);
}

輸出

The numbers are 21 2 19

更新於:2020年1月3日

413 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.