Google Interview Question
SDE1sCountry: United States
Java Code
import java.util.HashMap;
import java.util.Scanner;
public class PairSwap {
private static int counter = 0;
private static Scanner inp;
public static int findIndex (int[] array, int t) {
if (array == null) return -1;
int len = array.length;
int i = 0;
while (i < len) {
if (array[i] == t) return i;
else i++;
}
return -1;
}
public static void main(String[] args) {
inp = new Scanner(System.in);
int n = inp.nextInt();// Total pair
int m = 2 * n;// Total number
int[] mapping = new int[2 * n];// array of random sittings
for (int i = 0; i < 2 * n; i++) {
mapping[i] = inp.nextInt();
}
HashMap<Integer, Integer> pairs = new HashMap<Integer, Integer>();// pair in key value form
HashMap<Integer, Integer> rpairs = new HashMap<Integer, Integer>();// pair in value key form
for (int i = 0; i < m; i += 2) {
pairs.put(mapping[i], mapping[i + 1]);
}
for (int i = 0; i < m; i += 2) {
rpairs.put(mapping[i + 1], mapping[i]);
}
int[] arr = new int[m];// array of random sittings
for (int i = 0; i < m; i++) {
arr[i] = inp.nextInt();
}
for (int i = 0; i < m; i += 2) {
if (pairs.containsKey(arr[i])) {
if (arr[i + 1] != pairs.get(arr[i])) {
int ind = findIndex(arr, pairs.get(arr[i]));
int temp = arr[i + 1];
arr[i + 1] = arr[ind];
arr[ind] = temp;
counter++;
}
} else {
if (arr[i + 1] != rpairs.get(arr[i])) {
int ind = findIndex(arr, rpairs.get(arr[i]));
int temp = arr[i + 1];
arr[i + 1] = arr[ind];
arr[ind] = temp;
counter++;
}
}
}
System.out.println(counter);
}
}
Java Code
import java.util.HashMap;
import java.util.Scanner;
public class PairSwap {
private static int counter = 0;
private static Scanner inp;
public static int findIndex (int[] array, int t) {
if (array == null) return -1;
int len = array.length;
int i = 0;
while (i < len) {
if (array[i] == t) return i;
else i++;
}
return -1;
}
public static void main(String[] args) {
inp = new Scanner(System.in);
int n = inp.nextInt();// Total pair
int m = 2 * n;// Total number
int[] mapping = new int[2 * n];// array of random sittings
for (int i = 0; i < 2 * n; i++) {
mapping[i] = inp.nextInt();
}
HashMap<Integer, Integer> pairs = new HashMap<Integer, Integer>();// pair in key value form
HashMap<Integer, Integer> rpairs = new HashMap<Integer, Integer>();// pair in value key form
for (int i = 0; i < m; i += 2) {
pairs.put(mapping[i], mapping[i + 1]);
}
for (int i = 0; i < m; i += 2) {
rpairs.put(mapping[i + 1], mapping[i]);
}
int[] arr = new int[m];// array of random sittings
for (int i = 0; i < m; i++) {
arr[i] = inp.nextInt();
}
for (int i = 0; i < m; i += 2) {
if (pairs.containsKey(arr[i])) {
if (arr[i + 1] != pairs.get(arr[i])) {
int ind = findIndex(arr, pairs.get(arr[i]));
int temp = arr[i + 1];
arr[i + 1] = arr[ind];
arr[ind] = temp;
counter++;
}
} else {
if (arr[i + 1] != rpairs.get(arr[i])) {
int ind = findIndex(arr, rpairs.get(arr[i]));
int temp = arr[i + 1];
arr[i + 1] = arr[ind];
arr[ind] = temp;
counter++;
}
}
}
System.out.println(counter);
}
}
import java.util.HashMap;
import java.util.Scanner;
public class PairSwap {
private static int counter = 0;
private static Scanner inp;
public static int findIndex (int[] array, int t) {
if (array == null) return -1;
int len = array.length;
int i = 0;
while (i < len) {
if (array[i] == t) return i;
else i++;
}
return -1;
}
public static void main(String[] args) {
inp = new Scanner(System.in);
int n = inp.nextInt();// Total pair
int m = 2 * n;// Total number
int[] mapping = new int[2 * n];// array of random sittings
for (int i = 0; i < 2 * n; i++) {
mapping[i] = inp.nextInt();
}
HashMap<Integer, Integer> pairs = new HashMap<Integer, Integer>();// pair in key value form
HashMap<Integer, Integer> rpairs = new HashMap<Integer, Integer>();// pair in value key form
for (int i = 0; i < m; i += 2) {
pairs.put(mapping[i], mapping[i + 1]);
}
for (int i = 0; i < m; i += 2) {
rpairs.put(mapping[i + 1], mapping[i]);
}
int[] arr = new int[m];// array of random sittings
for (int i = 0; i < m; i++) {
arr[i] = inp.nextInt();
}
for (int i = 0; i < m; i += 2) {
if (pairs.containsKey(arr[i])) {
if (arr[i + 1] != pairs.get(arr[i])) {
int ind = findIndex(arr, pairs.get(arr[i]));
int temp = arr[i + 1];
arr[i + 1] = arr[ind];
arr[ind] = temp;
counter++;
}
} else {
if (arr[i + 1] != rpairs.get(arr[i])) {
int ind = findIndex(arr, rpairs.get(arr[i]));
int temp = arr[i + 1];
arr[i + 1] = arr[ind];
arr[ind] = temp;
counter++;
}
}
}
System.out.println(counter);
}
}
import java.util.HashMap;
import java.util.Scanner;
public class PairSwap {
private static int counter = 0;
private static Scanner inp;
public static int findIndex (int[] array, int t) {
if (array == null) return -1;
int len = array.length;
int i = 0;
while (i < len) {
if (array[i] == t) return i;
else i++;
}
return -1;
}
public static void main(String[] args) {
inp = new Scanner(System.in);
int n = inp.nextInt();// Total pair
int m = 2 * n;// Total number
int[] mapping = new int[2 * n];// array of random sittings
for (int i = 0; i < 2 * n; i++) {
mapping[i] = inp.nextInt();
}
HashMap<Integer, Integer> pairs = new HashMap<Integer, Integer>();// pair in key value form
HashMap<Integer, Integer> rpairs = new HashMap<Integer, Integer>();// pair in value key form
for (int i = 0; i < m; i += 2) {
pairs.put(mapping[i], mapping[i + 1]);
}
for (int i = 0; i < m; i += 2) {
rpairs.put(mapping[i + 1], mapping[i]);
}
int[] arr = new int[m];// array of random sittings
for (int i = 0; i < m; i++) {
arr[i] = inp.nextInt();
}
for (int i = 0; i < m; i += 2) {
if (pairs.containsKey(arr[i])) {
if (arr[i + 1] != pairs.get(arr[i])) {
int ind = findIndex(arr, pairs.get(arr[i]));
int temp = arr[i + 1];
arr[i + 1] = arr[ind];
arr[ind] = temp;
counter++;
}
} else {
if (arr[i + 1] != rpairs.get(arr[i])) {
int ind = findIndex(arr, rpairs.get(arr[i]));
int temp = arr[i + 1];
arr[i + 1] = arr[ind];
arr[ind] = temp;
counter++;
}
}
}
System.out.println(counter);
}
}
static int countSwaps(int[][] seats) {
int n = seats.length;
HashMap<Integer, Integer> unmatches = new HashMap<>();
for (int i = 0; i < n; ++i) {
if (seats[i][0] == seats[i][1]) {
continue;
}
unmatches.put(seats[i][0], seats[i][1]);
}
int count = 0;
while (!unmatches.isEmpty()) {
int l1, r1, l2, r2;
l1 = unmatches.keySet().iterator().next();
r1 = unmatches.get(l1);
l2 = r1;
r2 = unmatches.get(l2);
unmatches.put(l1, r2);
unmatches.put(l2, r1);
++count;
unmatches.remove(l2);
if (l1 == r2) {
unmatches.remove(l1);
}
}
return count;
}
- Alex December 08, 2017