9.23 OPPO笔试算法题
又捞起来笔试了。
第一题
遍历交换就可以了
package bishi;
import java.util.Scanner;
public class oppo1 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String sint = scan.nextLine();
int T = Integer.parseInt(sint);
while(T-->0){
String a = scan.nextLine();
String b = scan.nextLine();
if(a.equals(b)){
System.out.println("Yes");
}else if(a.length() != b.length()){
System.out.println("No");
}else {
int H = 0;
for (int i = 0; i < a.length() - 1; i++) {
StringBuffer sb = new StringBuffer(a);
char c1 = sb.charAt(i);
sb.setCharAt(i, sb.charAt(i+1));
sb.setCharAt(i+1,c1);
String s3 = sb.toString();
if (s3.equals(b)) {
System.out.println("Yes");
H = 1;
break;
}
}
if(H == 0){
System.out.println("No");
}
}
}
}
} 第二题 有些特殊情况需要处理比如
3 1
1 1
1 2
1 3
这里要处理1 1
还有
1 2
2 1
1 3
这里要处理1 2和2 1这种无限循环的问题 我办法是把第二个2 1直接改为1 1
package bishi;
import java.util.Scanner;
public class oppo2 {
static int res = 1;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int c = sc.nextInt();
int[][] arr = new int[n][2];
for (int i = 0; i < n; i++) {
for (int j = 0; j < 2; j++) {
arr[i][j] = sc.nextInt();
}
}
for (int i = 0; i < n; i++) {
findWrong(arr,i,arr[i][1]);
}
findRes(arr,c);
System.out.println(res);
}
private static void findWrong(int[][] arr, int start, int j) {
for (int i = start+1; i < arr.length; i++) {
if(arr[i][0] == j){
arr[i][0] = arr[i][1];
}
}
}
private static void findRes(int[][] arr, int j) {
for (int i = 0; i < arr.length; i++) {
if(arr[i][0] == j && arr[i][0] != arr[i][1]){
res++;
findRes(arr,arr[i][1]);
}
}
}
} 第三题 那个什么树的连接根本没用,就是把问题转为是一个数组变为有序的最小交换次数就可以了,然后就很简单。
package bishi;
import java.util.Scanner;
public class oppo3 {
static int res = 0;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
for (int i = 0; i < n; i++) {
if(arr[i] != i+1){
res++;
swap(arr,i,i+1);
}
}
System.out.println(res);
}
private static void swap(int[] arr,int x, int z) {
for (int n = 0; n < arr.length; n++) {
if(arr[n] == z){
int temp = arr[x];
arr[x] = arr[n];
arr[n] = temp;
}
}
}
}

