විශාලතම පරිමිතිය ත්‍රිකෝණ ලීට්කෝඩ් විසඳුම


දුෂ්කරතා මට්ටම පහසු
නිතර අසනු ලැබේ C3 IoT
ගණිතය වර්ග කිරීම

ගැටළු ප්රකාශය

ගැටලුවේ ”විශාලතම පරිමිතිය ත්රිකෝණය ”අපට n අගයන් සහිත අරාවක් ලබා දී ඇත. සියලුම අගයන් ධනාත්මක නිඛිල වේ. මෙම අගයන්ගෙන් අපට සෑදිය හැකි ත්‍රිකෝණයේ උපරිම පරිමිතිය සොයා ගැනීමට ප්‍රශ්නය අසන්න. ත්රිකෝණය තැනීමට නොහැකි නම් අපි 0 මුද්රණය කළ යුතුය.

උදාහරණයක්

arr = [3,2,3,4]
10

පැහැදිලි කිරීම: මෙම අගයන් භාවිතා කර සෑදිය හැකි ත්‍රිකෝණයේ විශාලතම පරිමිතිය 10 වන අතර ත්‍රිකෝණවල පැති 4,3,3 වේ.

විශාලතම පරිමිතිය ත්‍රිකෝණ ලීට්කෝඩ් විසඳුම සඳහා ප්‍රවේශය

මෙය මූලික ගණිත ගැටලුවකි. එබැවින් එය විසඳීම සඳහා මෙම ප්‍රමේයය අප දැන සිටිය යුතුය ත්‍රිකෝණයක ඕනෑම පැති දෙකක දිග සෑම විටම තුන්වන පැත්තට වඩා වැඩි බව. එසේ නොමැති නම්, ඔවුන් ත්රිකෝණයක් සාදන්නේ නැත. ත්රිකෝණයේ පැති යැයි කියමු a, b, සහ c. මෙම ප්‍රමේයයෙන් සෑහීමකට පත් නොවන්නේ නම් ත්‍රිකෝණයක් සෑදිය නොහැකි ආකාරය රූපවල දැක්වේ.

විශාලතම පරිමිතිය ත්‍රිකෝණයට ලීට්කෝඩ් විසඳුම

ප්‍රශ්නය විශාලතම පරිමිතිය ත්‍රිකෝණය සොයා ගැනීමට අසන බැවින්, + b> c, b + c> a, සහ + c> b යන කොන්දේසි සපුරාලිය හැකි ත්‍රිත්ව අතුරින් a + b + c උපරිම වේ.

එබැවින් විශාලතම පරිමිතිය ලබා ගැනීම සඳහා අපට හැකි තරම් විශාල a, b, සහ c අගයන් අවශ්‍ය වේ. අපි අරාව වර්ග කර පසුව ප්‍රමේයය තෘප්තිමත් කළහොත් විශාලතම අගයන් තුනෙන් ආරම්භ කරමු. එසේ වුවහොත් ඒවායේ එකතුව අවශ්‍ය අගය වේ. එසේ නොමැතිනම්, අපි ඊළඟ විශාලතම අගයන් තුන සඳහා පරීක්ෂා කරන්නෙමු.

එවැනි ත්‍රිත්වයක් නොමැති නම් ත්‍රිකෝණයේ විශාලතම පරිමිතිය 0 වේ.

 ක්රියාත්මක කිරීම

විශාලතම පරිමිතිය ත්‍රිකෝණය සඳහා C ++ කේතය

#include <bits/stdc++.h> 
using namespace std; 
    int largestPerimeter(vector<int>&  arr) {
        int n=arr.size();
        sort(arr.begin(),arr.end());
       for (int i =n - 1; i > 1; --i)
            if (arr[i] < arr[i - 1] + arr[i - 2])
                return arr[i] + arr[i - 1] + arr[i - 2];
        return 0;
    }
int main() 
{ 
 vector<int> arr = { 3,2,3,4 }; 
 cout<<largestPerimeter(arr)<<endl; 
 return 0;
}
10

විශාලතම පරිමිතිය ත්‍රිකෝණය සඳහා ජාවා කේතය

import java.util.Arrays; 
public class Tutorialcup {
    public static int largestPerimeter(int[] arr) {
        Arrays.sort(arr);
        int n= arr.length;
        for (int i =n - 1; i > 1; --i)
            if (arr[i] < arr[i - 1] + arr[i - 2])
                return arr[i] + arr[i - 1] + arr[i - 2];
        return 0;
    }
  public static void main(String[] args) {
    int [] arr = {3,2,3,4}; 
    int ans= largestPerimeter(arr);
    System.out.println(ans);
  }
}

 

10

විශාලතම පරිමිතිය ත්‍රිකෝණ ලීට්කෝඩ් විසඳුමේ සංකීර්ණතා විශ්ලේෂණය

කාල සංකීර්ණත්වය

ඉහත කේතයේ කාල සංකීර්ණතාව වේ ඕ (nlogn) මොකද අපි අරාව වර්ග කරනවා. මෙහි n යනු අරාවේ ප්‍රමාණයයි.

අවකාශයේ සංකීර්ණතාව

ඉහත කේතයේ අවකාශය සංකීර්ණ වේ ඕ (1) පිළිතුර භාවිතා කිරීමට අප භාවිතා කරන්නේ විචල්‍යය පමණි.

ආශ්රිත