ပေးထားသောတန်ဖိုးထက်နည်းသောငွေပမာဏနှင့်အတူသုံးမွှာပူးအရေအတွက်


ခက်ခဲအဆင့် အလယ်အလတ်
မကြာခဏမေးတယ် Adobe က အမေဇုံ Apple ဘလွန်းဘာ့ဂ် ByteDance Cisco သည် Citadel Citrix DoorDash ကို eBay Facebook က Goldman Sachs Google Hulu IBM က Infosys သင်္ချာ Microsoft က Oracle က PayPal က Qualtrics Samsung ServiceNow Splunk ရင်ပြင် Tencent တက်စလာ Uber ဗီဇာ VMware က Walmart ဓာတ်ခွဲခန်းများ Yahoo က Zoho
Akamai အခင်းအကျင်း Groupon Postmates ညွှန်ပြချက်နှစ်ခု နှစ်ခုထောက်ပြ အလုပ်လုပ်ပါတယ် Applications

ပြProbleနာဖော်ပြချက်

ကျွန်ုပ်တို့သည် N နံပါတ်များပါ ၀ င်သောခင်းကျင်းမှုကိုပေးထားသည်။ ပေးထားသော၌တည်၏ အခင်းအကျင်း, သုံးတန်ဖိုးကိုပေးထားတန်ဖိုးထက်လျော့နည်းပေါင်းလဒ်နှင့်အတူရေတွက်။

နမူနာ

input

a [] = {1, 2, 3, 4, 5, 6, 7, 8}
ပေါင်းလဒ် = 10

output

7
ဖြစ်နိုင်သောသုံးမွှာပူးများမှာ - (1,2,3), (1,2,4), (1,2,5), (1,2,6), (1,3,4), (1,3,5) ), (2,3,4)

input

က [] = {၃၊ ၇၊ ၉၊ ၁၊ ၂၊ ၅၊ ၁၁၊ ၄}
ပေါင်းလဒ် = 10

output

6
ဖြစ်နိုင်သောသုံးမွှာပူးများမှာ (3,1,2)၊ (3,1,5), (3,1,4), (3,2,4), (1,2,5), (1,2,4) )

ချဉ်းကပ်နည်း 1

algorithm

1. ဖြစ်နိုင်သည့် triplets အားလုံးကိုရွေးချယ်ခြင်းဖြင့်အသိုက် ၃ ခုကို run ပါ။

2. ရလဒ် = 0 Initialize ။

3. Element များ၏စုစုပေါင်းသည် Sum ထက်နည်းလျှင်၊ Increment count ။

4. ရလဒ်ကိုအခြေအနေကိုဖြည့်ဆည်းနိုင်သောသုံးချောင်းအတိုအဖြစ်ပုံနှိပ်ပါ။

အကောင်အထည်ဖော်ရေး

ပေးထားသောတန်ဖိုးထက်နည်းသောငွေပမာဏသုံးရေယာဉ်ငယ်များအတွက် C ++ အစီအစဉ်

#include <bits/stdc++.h>
using namespace std;
 
//Main function
int main()
{
    int array[] = {3, 7, 9, 1, 2, 5, 11, 4};
    int N = sizeof(array)/sizeof(array[0]);
    int sum = 10;
    int result = 0;
    //First for loop for selecting first element
    //Second loop for second element
    //Third loop for third element.
    //check for triplets satisfing the condition, and increment result
    for (int i = 0; i < N-2; i++)
    {
       for (int j = i+1; j < N-1; j++)
       {
           for (int k = j+1; k < N; k++)
           {
               if(array[i]+array[j]+array[k] < sum)
                   {
                      result++;
                   }
           }
       }
    }
    cout<<"Number of Triplets found = ";
    cout<<result;
    return 0;
}
Number of Triplets found = 6

ပေးထားသောတန်ဖိုးထက်လျော့နည်းသောပမာဏနှင့်အတူ triplets ၏ရေတွက်ဘို့ Java အစီအစဉ်

import static java.lang.Math.pow;
import java.util.Scanner;
class sum
{
    public static void main(String[] args)  
    { 
        Scanner sr = new Scanner(System.in);
        int n = sr.nextInt();
        int sum = sr.nextInt();
        int a[] = new int[n];
        for(int i=0;i<n;i++)
        {
            a[i] = sr.nextInt();
        }
        //First for loop for selecting first element
        //Second loop for second element
        //Third loop for third element.
        //check for triplets satisfing the condition, and increment result
        int result=0;
        for (int i = 0; i < n-2; i++)
        {
           for (int j = i+1; j < n-1; j++)
           {
               for (int k = j+1; k < n; k++)
               {
                   if(a[i]+a[j]+a[k] < sum)
                       {
                          result++;
                       }
               }
           }
        }
        System.out.print("Number of Triplets found = ");
        System.out.println(result);
    }
}
5 6
1 2 3 2 1
Number of Triplets found = 5

ရှုပ်ထွေးဆန်းစစ်ခြင်း

အချိန်ရှုပ်ထွေး

အို (n * n * n) n သည်ပေးထားသောခင်းကျင်း၏အရွယ်အစားဖြစ်သည်။ ဤတွင်ကျွန်ုပ်တို့သည်သုံးမွှာပူးအားလုံးကိုစစ်ဆေးပြီးအခြေအနေမှန်ကန်ပါကရလဒ်၏အရေအတွက်ကိုတိုးမြှင့်နိုင်သည်။

အာကာသရှုပ်ထွေးမှု

အို (၁) ဘာလို့လဲဆိုတော့ငါတို့ဒီမှာအရန်နေရာမရှိဘူး။

ချဉ်းကပ်နည်း 2

algorithm

1. ပေးထားသောခင်းကျင်းမှုကိုစီပါ၊ ရလဒ် = 0 ကိုစတင်ပါ

2. i မှ N-2 သို့ N ကိုရွှေ့ပါ (N သည်ခင်းကျင်း၏အရွယ်အစားဖြစ်သည်) နှင့် array [i] နှင့် triplet ၏ပထမဆုံးဒြပ်စင်ကိုယူပါ။

3. ကျန်တဲ့ element နှစ်ခုကိုထောင့် element တွေအနေနဲ့စတင်ပါ။ array [i + 1] နှင့်ခင်းကျင်းခြင်း [N-1]

4. သူတို့လုပ်ဖို့တွေ့ဆုံရန်သည်အထိ j နှင့် k ရွှေ့ပါ,

  1. အကယ်၍ ပေါင်းလဒ်သည်ပေးထားသောပမာဏထက်ကြီးလျှင်၊ နောက်ဆုံး element ၏ pointer ကိုရွှေ့ပါ။ (ခင်းကျင်း [N-1]) ။
  2. အခြားအရာသည်ပေါင်းလဒ်သည်ပေးသောပမာဏထက်နည်းလျှင်၎င်းသည်ကျေနပ်ဖွယ်ကောင်းသောဖြစ်နိုင်သော t-element များရှိနိုင်ပြီးရလဒ်အတွက် (kj) ထပ်ပေါင်းနိုင်သည်။ ထိုအခါခင်းကျင်း [i + 1] pointer ကိုရွှေ့။

အဆင့် 5: ကွင်းဆက်အဆုံးသတ်ပြီးနောက်ရလဒ်ကို print ထုတ်ပါ။

အကောင်အထည်ဖော်ရေး

ပေးထားသောတန်ဖိုးထက်နည်းသောငွေပမာဏသုံးရေယာဉ်ငယ်များအတွက် C ++ အစီအစဉ်

#include <bits/stdc++.h>
using namespace std;
 
// Main function
int main()
{
    int array[] ={1, 2,3,5,6, 3, 2, 5, 7};//input array
    int N = sizeof(array)/sizeof(array[0]);//size of the input array(N)
    int Sum = 9;//input Sum
    int result = 0;//initilizing count of triplets
    sort(array,array+N);//sorting the input array
    //selecting first element
    for(int i = 0; i < N - 2; i++)
    {
        int j=i+1,k=N-1;//second and third elements as last two elements
        while(j<k)
        {
            // Sum of triplet is greater than or equalto given sum, move to find smaller values
            if(array[i] + array[j] + array[k] >= Sum)
            {
                k--;
            }
            // Sum of triplet is less than given sum
            else
            {
                //for current i and j there can be k-j elements, move j pointer
                result += (k - j);
                j++;
            }
        }
    }
    cout<<"Number of Triplets found = ";
    cout<<result;
}
Number of Triplets found = 14

ပေးထားသောတန်ဖိုးထက်လျော့နည်းသောပမာဏနှင့်အတူ triplets ၏ရေတွက်ဘို့ Java အစီအစဉ်

import static java.lang.Math.pow;
import java.util.Arrays;
import java.util.Scanner;
class sum
{
    public static void main(String[] args)  
    { 
        Scanner sr = new Scanner(System.in);
        int n = sr.nextInt();
        int sum = sr.nextInt();
        int a[] = new int[n];
        for(int i=0;i<n;i++)
        {
            a[i] = sr.nextInt();
        }
        //First for loop for selecting first element
        //Second loop for second element
        //Third loop for third element.
        //check for triplets satisfing the condition, and increment result
        int result=0;
        Arrays. sort(a);//sorting the input array
        //selecting first element
        for(int i = 0; i < n - 2; i++)
        {
            int j=i+1,k=n-1;//second and third elements as last two elements
            while(j<k)
            {
                // Sum of triplet is greater than or equalto given sum, move to find smaller values
                if(a[i] + a[j] + a[k] >= sum)
                {
                    k--;
                }
                // Sum of triplet is less than given sum
                else
                {
                    //for current i and j there can be k-j elements, move j pointer
                    result += (k - j);
                    j++;
                }
            }
        }
        System.out.print("Number of Triplets found = ");
        System.out.println(result);
    }
}
9 9
1 2 3 5 6 3 2 5 7
Number of Triplets found = 14

ရှုပ်ထွေးဆန်းစစ်ခြင်း

အချိန်ရှုပ်ထွေး

အို (n * n) အဘယ်မှာ n n ခင်းကျင်းအတွက်ပစ္စုပ္ပန် element များ၏နံပါတ်ဖြစ်ပါတယ်။ ဤတွင်ကျွန်ုပ်တို့သည်သုံးမွှာပူး၏ဒြပ်ထုတစ်ခုအားပြုပြင်ပြီးဒြပ်စင်တစ်ခုအတွက်အဆိုးဆုံးအနေဖြင့် O (N) ကိုသုံးသော pointer နည်းလမ်းနှစ်ခုကိုအသုံးပြုသည်။

အာကာသရှုပ်ထွေးမှု

အို (၁) ဘာလို့လဲဆိုတော့ငါတို့ဒီမှာအရန်နေရာမရှိဘူး။

ကိုးကား