Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรมนับจำนวนสามเหลี่ยมสามเท่าที่ถูกต้องใน C++


สมมุติว่าเรามีอาร์เรย์ของตัวเลข เราต้องหาจำนวน triplets ที่เลือกจากอาร์เรย์ที่สามารถสร้างสามเหลี่ยมได้ ถ้าเราหามันเป็นความยาวด้านของสามเหลี่ยม ดังนั้นหากอินพุตเป็น [2,2,3,4] ผลลัพธ์จะเป็น 3 เนื่องจากมีแฝดสาม [2,3,4] ใช้ 2 ตัวแรก [2,3,4] ใช้ 2 อันที่สอง และ [2,2,3].

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ret :=0, n :=ขนาดของ nums, sort nums

  • สำหรับฉันอยู่ในช่วง n − 1 ลงไปที่ 0

    • ขวา :=i − 1, ซ้าย :=0

    • ขณะที่ซ้าย <ขวา

      • ผลรวม :=nums[ซ้าย] + nums[ขวา]

      • ถ้า sum> nums[i] ให้เพิ่ม ret โดย right − left, ลด right 1 มิฉะนั้น ให้เพิ่มไปทางซ้าย 1

  • รีเทิร์น

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int triangleNumber(vector<int>& 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;
   }
};
main(){
   vector<int> v = {2,2,3,4};
   Solution ob;
   cout << (ob.triangleNumber(v));
}

อินพุต

[2,2,3,4]

ผลลัพธ์

3