今日头条后台笔试第一道编程题解法
当时没做完,后来花了一点时间把它做完,应该是ac了,但是时间复杂度可能有点高。
题目大概是这样的:假设有一点x,其右上区域没有任何点,输出符合条件的点x。
思路是这样的:
1.先按照x轴的值对坐标点进行排序,最后一个点无论如何都满足条件。
2.再依次比较y轴的值,由于x值已经排好序(由小到大),y值只要遇到后面有比它大的,该点就不符合条件,继续循环判断下一个点是否符合条件。如果某一个点,其y值大于后面所有点的y值,该点符合条件,输出(注意是大于其后的所有的点的y值,前面有点的y值大于它,它仍旧符合条件,因为前面的点的x值是小于它的)。
代码如下:
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc1 = new Scanner(System.in);
int n = sc1.nextInt();
int[][] intArray = new int[n][2];
String str1 = null;
Scanner sc2 = new Scanner(System.in);
for(int i = 0; i < n; i++) {
str1 = sc2.nextLine();
String[] strArray = str1.split(" ");
intArray[i][0] = Integer.parseInt(strArray[0]);
intArray[i][1] = Integer.parseInt(strArray[1]);
}
//按x值,由小到大进行排序
for(int i = 0; i < n - 1; i++) {
for(int j = 0; j < n - i - 1; j++) {
if(intArray[j][0] > intArray[j+1][0]) {
//将x轴值进行交换
int temp1 = intArray[j][0];
intArray[j][0] = intArray[j+1][0];
intArray[j+1][0] = temp1;
//y轴值必须跟着x走,作相同交换
int temp2 = intArray[j][1];
intArray[j][1] = intArray[j+1][1];
intArray[j+1][1] = temp2;
}
}
}
//对y值进行比较,由于x已经从小到大排序,只要后面数组的y值有更大的,该数组不满足条件
int x ;
for(int i = 0; i < n; i++){
for(x = i + 1; x < n; x++){
if(intArray[i][1] < intArray[x][1]) {
break;
}
}
if(x == n || i == n) {
System.out.print(intArray[i][0]);
System.out.print(" ");
System.out.print(intArray[i][1]);
System.out.println();
}
}
}
}#字节跳动##Java工程师#