একটি সংখ্যা অ্যারে দেওয়া আছে। লক্ষ্য হল অ্যারে থেকে তিনটি উপাদান বেছে নিয়ে যেসব ট্রিপলেট ত্রিভুজের বাহু হিসেবে ব্যবহার করা যায়, তাদের সংখ্যা বের করা। ত্রিভুজের শর্ত: যেকোনো দুটি বাহুর যোগফল তৃতীয় বাহুর চেয়ে বড় হয়।
অ্যারে সর্ট করে টু-পয়েন্টার টেকনিক দিয়ে O(n²) সময়ে সমাধান করা হয়।
ইনপুট: [2,2,3,4]
আউটপুট: বৈধ ত্রিভুজ ট্রিপলেট: ৩
ব্যাখ্যা: [2,3,4] (প্রথম ২ দিয়ে), [2,3,4] (দ্বিতীয় ২ দিয়ে), [2,2,3]
- অ্যারে সর্ট করা হয়।
- সবচেয়ে বড় বাহু i ধরে left=0, right=i-1 রাখা হয়।
- nums[left] + nums[right] > nums[i] হলে right-left সংখ্যক জোড়া হবে, right-- করা হয়।
- অন্যথায় left++ করা হয়।
#includeusing namespace std; class Solution { public: int triangleNumber(vector & nums) { int ret = 0; int n = nums.size(); sort(nums.begin(), nums.end()); for(int i = n - 1; i >= 0; i--){ int right = i - 1; int left = 0; while(left < right){ int sum = nums[left] + nums[right]; if(sum > nums[i]){ ret += right - left; right--; } else { left++; } } } return ret; } }; int main(){ vector v = {2,2,3,4}; Solution ob; cout << ob.triangleNumber(v); return 0; }
উপরোক্ত কোড রান করলে আউটপুট:
৩