Question

In: Computer Science

Let's say someone gives you an array that is filled with P numbers. Please next see...

Let's say someone gives you an array that is filled with P numbers. Please next see if there are two numbers whose sum equals a given number S and determine if there is two numbers that do this. Take for example, if I give you the input array to be 8, 2, 1, 7, and our variable S is 15, then the answer would be yes because 8 and 7 add up to S which in this case is 15. You are allowed to use a number twice. To solve this problem, please  Give me an O(NlogN) algorithm. (In language C++)

Solutions

Expert Solution

Code:

#include<iostream>
using namespace std;
bool check_pair(int *arr,int n,int sum){
         int first=0,last=n-1;
   while(first<last){
        if (arr[first]+arr[last]<sum)
                first++;
        else if (arr[first]+arr[last]>sum)
        last--;
        else return 1;
   }
}
void swapping(int &a, int &b) {     //swap the content of a and b
   int temp;
   temp = a;
   a = b;
   b = temp;
}
void display(int *array, int size) {
   for(int i = 0; i<size; i++)
      cout << array[i] << " ";
   cout << endl;
}
void merge(int *array, int l, int m, int r) {
   int i, j, k, nl, nr;
   //size of left and right sub-arrays
   nl = m-l+1; nr = r-m;
   int larr[nl], rarr[nr];
   //fill left and right sub-arrays
   for(i = 0; i<nl; i++)
      larr[i] = array[l+i];
   for(j = 0; j<nr; j++)
      rarr[j] = array[m+1+j];
   i = 0; j = 0; k = l;
   //marge temp arrays to real array
   while(i < nl && j<nr) {
      if(larr[i] <= rarr[j]) {
         array[k] = larr[i];
         i++;
      }else{
         array[k] = rarr[j];
         j++;
      }
      k++;
   }
   while(i<nl) {       //extra element in left array
      array[k] = larr[i];
      i++; k++;
   }
   while(j<nr) {     //extra element in right array
      array[k] = rarr[j];
      j++; k++;
   }
}
void mergeSort(int *array, int l, int r) {
   int m;
   if(l < r) {
      int m = l+(r-l)/2;
      // Sort first and second arrays
      mergeSort(array, l, m);
      mergeSort(array, m+1, r);
      merge(array, l, m, r);
   }
}
int main() {
   int n;
   cout << "Enter the number of elements: ";
   cin >> n;
   int arr[n];     //create an array with given number of elements
   cout << "Enter elements:" << endl;
   for(int i = 0; i<n; i++) {
      cin >> arr[i];
   }
   cout << "Array before Sorting: ";
   display(arr, n);
   mergeSort(arr, 0, n-1);     //(n-1) for last index
   cout << "Array after Sorting: ";
   display(arr, n);
   //solution for your question starts here.
   printf("enter the sum for which you want to find pair\n");
   int sum;
   scanf("%d",&sum);
   bool con=check_pair(arr,n,sum);
   if (con)
        cout<<"pair available\n";
   else
        cout<<"pair unavailable\n";
   return 0;

}

Explanation:

Algorithm:

1.sort array (merge sort o(n log n)

2. Take two pointers first and last.

3. while(first<last)

do{

if arr[first]+arr[last]<sum

first++

else if arr[first]+arr[last]>sum

last--

else

return 1

}--->o(n)

This whole program takes total complexity o(nlogn)

Hope it helps.

I hope you will accept my answer


Related Solutions

Let's say someone were to give you a sorted list of P elements that were followed...
Let's say someone were to give you a sorted list of P elements that were followed by f(P) = O(sqrt(P)) randomly ordered elements. Please show how you would sort the whole list? In the c++ language, please show and describe.
You are given an array of length n that is filled with two symbols (say 0...
You are given an array of length n that is filled with two symbols (say 0 and 1); all m copies of one symbol appear first, at the beginning of the array, followed by all n − m copies of the other symbol. You are to find the index of the first copy of the second symbol in time O(logm). include: code,  proof of correctness, and runtime analysis  
Let's say you want to poll a random sample of 150 students on campus to see...
Let's say you want to poll a random sample of 150 students on campus to see if they prefer to take online classes. Of course, if you took an actual poll you would only get one number (your sample proportion, p-hat). But, imagine all the possible samples of 150 students that you could draw and the imagined histogram of all the sample proportions from those samples. 1. What shape would the histogram of all the possible sample proportions (p-hat's) have?...
Given an array A of n distinct real numbers, we say that a pair of numbers...
Given an array A of n distinct real numbers, we say that a pair of numbers i, j ∈ {0, . . . , n−1} form an inversion of A if i < j and A[i] > A[j]. Let inv(A) = {(i, j) | i < j and A[i] > A[j]}. Answer the following: (a) How small can the number of inversions be? Give an example of an array of length n with the smallest possible number of inversions. (b)...
Given an array A of n distinct numbers, we say that a pair of numbers i,...
Given an array A of n distinct numbers, we say that a pair of numbers i, j ∈ {0, . . . , n − 1} form an inversion of A if i < j and A[i] > A[j]. Let inv(A) = {(i, j) | i < j and A[i] > A[j]}. Define the Inversion problem as follows: • Input: an array A consisting of distinct numbers. • Output: the number of inversions of A, i.e. |inv(A)|. Answer the following:...
Suppose someone gives you 1414 to 44 odds that you cannot roll two even numbers with...
Suppose someone gives you 1414 to 44 odds that you cannot roll two even numbers with the roll of two fair dice. This means you win ​$1414 if you succeed and you lose ​$44 if you fail. What is the expected value of this game to​ you? Should you expect to win or lose the expected value in the first​ game? What can you expect if you play 200200 ​times? Explain.​ (The table will be helpful in finding the required​ probabilities.) LOADING... Click the...
Let's say that you are an athletic trainer, and you are interested in the impact of...
Let's say that you are an athletic trainer, and you are interested in the impact of different types of exercise upon resting heart beats. You run a study comparing people who do yoga, pilates, and runners. You have collected the data and you are ready to analyze it via ANOVA. Using JASP, conduct your ANOVA. Then complete the fill-in-the-blank sentence below. HBM Sport 59 Yoga 60 Yoga 60 Yoga 55 Yoga 61 Yoga 59 Yoga 58 Yoga 60 Yoga 60...
To see for yourself how the central limit theorem works, let's say we have a normal...
To see for yourself how the central limit theorem works, let's say we have a normal distribution (with mean =100 and standard devation = 20). Let's generate some random samples of various sizes from this distribution. We can do this in excel using =norm.inv(rand(),100,20) and it will randomly generate numbers from this distribution. I generated four samples of size 5, 10, 20 and 30, and got the means of 124 (n=5); 91 (n=10); 105 (n=20); 103 (n=30). If I continue...
Let's look at Tesla's profitability. What do the numbers say? Is Tesla profitable? Does it have...
Let's look at Tesla's profitability. What do the numbers say? Is Tesla profitable? Does it have a competitive advantage? Motivate your responses.
. As input you are given two arrays: an array of numbers ? and an array...
. As input you are given two arrays: an array of numbers ? and an array ? of queries where each query is a target number. The array ? is unsorted and may contain duplicates. Your goal is, for each query ? in the array ?, count the number of pairs in the array ? that sums up to ?; that is, the number of distinct pairs of indices [?, ?], with ? < ?, such that ?[?] + ?[?]...
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT