สมมติว่าเรามีอาร์เรย์ของจำนวนเต็ม n ตัวที่เรียกว่า nums และเรามีเป้าหมายด้วย เราต้องหาจำนวนของดัชนี triplets (i, j, k) ที่นี่ i, j, k ทั้งหมดอยู่ในช่วง 0 ถึง n - 1 และนั่น เป็นไปตามเงื่อนไข nums[i] + nums[j] + nums[k]
ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[-2,0,1,3] และเป้าหมาย =2 ผลลัพธ์จะเป็น 2 เนื่องจากมีแฝดสามตัวที่ผลรวมน้อยกว่า 2:[-2,0, 1] และ [-2,0,3].
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
ยกเลิก :=0
-
จัดเรียงอาร์เรย์ a
-
n :=ขนาดของ a
-
สำหรับการเริ่มต้น i :=0 เมื่อ i
-
ซ้าย :=i + 1, ขวา :=n - 1
-
ขณะที่ซ้าย <ขวา ทำ -
-
ผลรวม :=a[i] + a[left] + a[right]
-
ถ้าผลรวม
-
ret :=ret + ขวา - ซ้าย
-
(เพิ่มขึ้นเหลือ 1)
-
-
มิฉะนั้น
-
(ลดสิทธิ์ลง 1)
-
-
-
-
รีเทิร์น
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h> using namespace std; class Solution { public: int threeSumSmaller(vector<int<& a, int t) { int ret = 0; sort(a.begin(), a.end()); int n = a.size(); for (int i = 0; i < n - 2; i++) { int left = i + 1; int right = n - 1; while (left < right) { int sum = a[i] + a[left] + a[right]; if (sum < t) { ret += right - left; left++; } else right--; } } return ret; } }; main(){ Solution ob; vector<int< v = {-2,0,1,3}; cout << (ob.threeSumSmaller(v,2)); }
อินพุต
[-2,0,1,3] 2
ผลลัพธ์
2