Skip to content

Instantly share code, notes, and snippets.

@Shivamy2
Last active January 25, 2021 05:40
Show Gist options
  • Save Shivamy2/b2092a87a730b2a7c13d3401bb5eed13 to your computer and use it in GitHub Desktop.
Save Shivamy2/b2092a87a730b2a7c13d3401bb5eed13 to your computer and use it in GitHub Desktop.
// In Java
import java.util.*;
class Question1 {
// Please try not to change anything in this method.
public static void main(String[] args) {
int[] numbers = new int[15];
addRandomNumbers(numbers);
System.out.println(Arrays.toString(numbers));
System.out.println(findPairsByList(numbers, 10));
System.out.println(findPairs(numbers, 10));
}
// Please try not to change anything in this method.
public static void addRandomNumbers(int[] array) {
for (int i = 0; i < array.length; i++) {
array[i] = new Random().nextInt() % 10;
}
}
// Try to complete this method.
// By using string as type of list
public static List<String> findPairs(int[] numbers, int desiredSum) {
List<String> result = new ArrayList<>();
String resultString = "";
Arrays.sort(numbers);
int i = 0, j = numbers.length-1;
while (i < j) {
if ((numbers[i] + numbers[j]) == desiredSum) {
resultString += numbers[i] + " " + numbers[j];
result.add(resultString);
resultString = "";
i++; j--;
}
else if ((numbers[i] + numbers[j]) > desiredSum) j--;
else i++;
}
return result;
}
// By using list as a type of list instead of pair because I don't know javafx
public static List<List<Integer>> findPairsByList(int[] numbers, int desiredSum) {
List<List<Integer>> result = new ArrayList<>();
Arrays.sort(numbers);
int i=0, j= numbers.length-1;
while(i<j) {
if((numbers[i] + numbers[j])== desiredSum) {
List<Integer> resultPairs = new ArrayList<>();
result.add(resultPairs);
resultPairs.add(numbers[i]);
resultPairs.add(numbers[j]);
i++; j--;
}
else if((numbers[i] + numbers[j]) < desiredSum) i++;
else j--;
}
return result;
}
}
// In C++
#include<bits/stdc++.h>
using namespace std;
int main() {
vector<int> v{5,3,6,4,1,7,8};
int number = 9;
vector<pair<int,int>> result;
int i=0, j=v.size()-1;
sort(v.begin(),v.end());
while(i<j) {
if((v[i]+v[j]) == number) {
result.push_back(make_pair(v[i],v[j]));
i++;
j--;
}
else if((v[i]+v[j]) > number) j--;
else i++;
}
for(auto item : result) cout << item.first << " " << item.second << endl;
return 0;
}
@dbc2201
Copy link

dbc2201 commented Jan 23, 2021

Java

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;

class Question1 {
    // Please try not to change anything in this method.
    public static void main(String[] args) {
        int[] numbers = new int[15];
        addRandomNumbers(numbers);
        System.out.println(Arrays.toString(numbers));
        System.out.println(findPairsByList(numbers, 10));
        System.out.println(findPairs(numbers, 10));
    }

    // Please try not to change anything in this method.
    public static void addRandomNumbers(int[] array) {
        for (int i = 0; i < array.length; i++) {
            array[i] = new Random().nextInt() % 10;
        }
    }

    // Try to complete this method.
    // By using string as type of list
    public static List<String> findPairs(int[] numbers, int desiredSum) {
        List<String> result = new ArrayList<>();
        Arrays.sort(numbers);
        int leftIndex = 0;
        int rightIndex = numbers.length - 1;
        while (leftIndex < rightIndex) {
            int currentSum = numbers[leftIndex] + numbers[rightIndex];
            if (currentSum == desiredSum) {
                result.add("{" + numbers[leftIndex] + ", " + numbers[rightIndex] + "}");
                leftIndex++;
                rightIndex--;
            } else if (currentSum > desiredSum) {
                rightIndex--;
            } else {
                leftIndex++;
            }
        }
        return result;
    }


    // List of List of Integer means there are more than 1 resultant lists in the same array!
    // By using list as a type of list instead of pair because I don't know javafx
    public static List<List<Integer>> findPairsByList(int[] numbers, int desiredSum) {
        List<List<Integer>> result = new ArrayList<>();
        Arrays.sort(numbers);
        int leftIndex = 0;
        int rightIndex = numbers.length - 1;
        while (leftIndex < rightIndex) {
            if ((numbers[leftIndex] + numbers[rightIndex]) == desiredSum) {
                List<Integer> resultPairs = new ArrayList<>();
                result.add(resultPairs);
                resultPairs.add(numbers[leftIndex]);
                resultPairs.add(numbers[rightIndex]);
                leftIndex++;
                rightIndex--;
            } else if ((numbers[leftIndex] + numbers[rightIndex]) < desiredSum) {
                leftIndex++;
            } else {
                rightIndex--;
            }
        }
        return result;
    }
}

Create a separate method for your C++ code

@dbc2201
Copy link

dbc2201 commented Jan 23, 2021

#include<bits/stdc++.h>

using namespace std;

vector<pair<int, int>> findPairs(vector<int> v, int desiredSum);

int main() {
    vector<int> v{5, 3, 6, 4, 1, 7, 8};
    int desiredSum = 10;
    vector<pair<int, int>> result = findPairs(v, desiredSum);
    for (auto item : result) {
        cout << "(" << item.first << ", " << item.second << ")" << endl;
    }
    return 0;
}

vector<pair<int, int>> findPairs(vector<int> v, int desiredSum) {
    vector<pair<int, int>> result;
    sort(v.begin(), v.end());
    int leftIndex = 0;
    int rightIndex = v.size() - 1;
    while (leftIndex < rightIndex) {
        int currentSum = v[leftIndex] + v[rightIndex];
        if (currentSum == desiredSum) {
            result.emplace_back(v[leftIndex], v[rightIndex]);
            leftIndex++;
            rightIndex--;
        } else if (currentSum < desiredSum) {
            leftIndex++;
        } else {
            rightIndex--;
        }
    }
    return result;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment