
牛牛與玩偶.png
2018愛奇藝春招,某崗筆試題在線編程題第一題:牛牛與玩偶
第一種我的實現(xiàn):
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while (scan.hasNext()) {
int n = scan.nextInt();
int[] arr = new int[n];
for (int i = 0; i < arr.length; i++) {
arr[i] = scan.nextInt();
}
// 以上已將n個元素的數(shù)組輸入完畢,下面找出那個唯一不同的元素的位置
// 相鄰兩個元素兩兩比較,可能會有兩種情況:如果不同的元素在數(shù)組邊緣,那么相鄰元素不同的情況只有一個,若是在中間,則有兩個這樣的數(shù)對(值不相等)
int index = -1;
for (int i = 1; i < arr.length; i++) {
int a = arr[i - 1];
int b = arr[i];
// 當(dāng)數(shù)組長度只有2這種情況,第一個數(shù)不等于第二個數(shù),那么最終答案應(yīng)該是第一個數(shù)
if (arr.length == 2) {
if (b != a) {
index = 1;
}
}
// 第一個元素不同的情況
else if (arr[0] != arr[1] && arr[0] != arr[2]) {
index = 1;
}
// 最后一個元素不同的情況
else if (arr[arr.length - 1] != arr[arr.length - 2] && arr[arr.length - 2] == arr[arr.length - 1]) {
index = arr.length;
}
// 中間元素不同的情況
else {
if (b == a) {// 當(dāng)b等于a時,繼續(xù)循環(huán)
continue;
} else {
// 當(dāng)b開始不等于a,直接將i+1賦給index,跳出循環(huán)
index = i + 1;
break;
}
}
}
System.out.println(index);
}
}
}
我朋友的第二種實現(xiàn):
import java.util.Scanner;
public class NiuNiu {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while (scan.hasNext()) {
int n = scan.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = scan.nextInt();
}
int a = arr[0];
boolean starDiffrent = false;
int targetIndex = -1;// 目標(biāo)結(jié)果
int i = 1;
for (; i < arr.length; i++) {
if (a != arr[i]) {
if (arr.length == 2) {
targetIndex = 1;
break;
}
if (!starDiffrent) {
starDiffrent = true;// 第一次開始不同
} else {
// 第二次不同
if (i > 2) {
targetIndex = i - 1;
} else {
targetIndex = 1;
break;
}
}
} else {
// 相等了
if (starDiffrent) {
targetIndex = i;
break;
} else {
starDiffrent = false;
}
}
}
if (i == arr.length) {
// 如果能比到最后,說明,最后一個是不同的
targetIndex = i;
}
System.out.println(targetIndex);
}
}
}
思維方式很重要,加油。