Sunday, 13 September 2015

Array Aptitude

Divide array in two part such that sum of array left to partition index i  is equal to sum of array right to partition index i.

That is A[0]+A[1]...+A[i-1]=A[i+1]+....+A[n]

This is slightly tricky question but very easy to solve and code ,if you find the trick.

Algorithm:

  • Find the cumulative sum at each index of array
  • loop through array and check  A[i-1]==A[n]-A[i] , If condition Satisfy for any index i, means array can be partition in two group with this condition,So print "YES" else "NO"
  • Use special case if array has only 1 element then print YES
  • if array has only two element then print "NO"

C++ Source Code

  1. #include <cmath>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <iostream>
  5. #include <algorithm>
  6. using namespace std;
  7. int main() {
  8.     int n,key;
  9.     vector<int> arr;
  10.     cout<<"No of element in array:";
  11.     cin>>n;
  12.     cout<<"Enter Array data :";
  13.     while(n--){
  14.             cin>>key;
  15.             arr.push_back(key);
  16.     }
  17.     //Special case for 1 and 2 element array
  18.     if(arr.size()==1){
  19.         cout<<"YES"<<endl;
  20.     }
  21.     else if(arr.size()==2){
  22.         cout<<"NO"<<endl;
  23.     }
  24.     else{
  25.         //find cumulative Sum at each index
  26.         for(int i=1;i<arr.size();i++){
  27.             arr[i]+=arr[i-1];
  28.         }
  29.          int flag=0;
  30.           n=arr.size()-1;
  31.         //check is arr[i-1]==arr[n]-arr[i]
  32.         for(int i=1;i<n;i++){
  33.             if(arr[i-1]==(arr[n]-arr[i])){
  34.                 flag=1;
  35.                 break;
  36.             }
  37.         }
  38.         if(flag)
  39.             cout<<"YES"<<endl;
  40.         else
  41.             cout<<"NO"<<endl;
  42.     }
  43.     return 0;
  44. }

Output :



No comments:

Post a Comment

THANKS FOR UR GREAT COMMENT

Blogger Widgets