在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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP