情景题笔试记录

携程(9/5)

思路:

class Node{
	int dingdan;
	int ruzhu;
	int lidian;
	
}
class TestJava{
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		ArrayList<Integer> list = new ArrayList<>();
		while(in.hasNext()){
			int count = in.nextInt();
			int time = in.nextInt();
			Node[] node = new Node[count];
			for(int k=0;k<node.length;k++){
				node[k] = new Node();
			}
			for(int k=0;k<count;k++){
				node[k].dingdan = in.nextInt();
				node[k].ruzhu = in.nextInt();
				node[k].lidian = in.nextInt();
				if(time>=node[k].ruzhu&&time<=node[k].lidian)
					list.add(node[k].dingdan);
			}
			if(list.size()==0){
				System.out.println("null");
			}
			Collections.sort(list);
			for(int i:list){
				System.out.println(i);
			}
		}
	}
}

测试用例:

测试用例一:
 10
20180602
1001 20180103 20180105
1002 20180202 20180203
1003 20180304 20180306
1004 20180401 20180408
1005 20180501 20180504
1006 20180601 20180604
1007 20180705 20180706
1008 20180801 20180804
1009 20180903 20180903
1010 20181003 20181003
输出: 
1006
测试用例二:
4
20180103
1013 20180103 20180105
1022 20180102 20180103
1026 20180103 20180103
1007 20180101 20180109
输出
1007
1013
1022
1026
测试用例三:
5
20170103
1013 20180103 20180105
1022 20180102 20180103
1103 20180104 20180106
1034 20180101 20180102
1105 20180201 20180204

输出:
null

??查询的时间复杂度是O(logn)怎么理解

2.Long类型数字中的1的个数(剑指offer上的原题,剑指offer上是整型int,这里是long)

3.

华为情景题:

第一题:

这题是典型的DFS,代码演示:

class TestJava{
	public static void main(String[] args) {
		int [][] a =  {{1,1,1,1,1,1,1,1,1,1},
			    {1,1,1,0,0,0,0,0,0,0},
	            {1,0,1,0,1,1,1,1,1,0},
			    {0,1,0,0,1,0,0,0,0,0},
			    {0,0,0,0,1,1,1,1,1,1},//有A
			    {0,0,0,0,1,0,1,1,1,1},
			    {0,0,0,0,1,0,1,1,1,1},
			    {0,1,1,1,1,1,1,1,1,1},
			    {0,1,1,1,1,1,1,1,1,1},
			    {0,1,1,1,1,1,1,1,1,1}};
		int x = 3;
		int y = 3;
		int hang = a.length;
		int lie = a[0].length;
		int [][] flag = new int[hang][lie];
		System.out.println(Helper(a,x,y,flag));;
	}
	public static boolean Helper(int[][] a,int i,int j,int[][] flag){
		if(i<0||j<0||i>a.length||j>a[0].length)
			return false;
		if(i==0||j==0||i==a.length||j==a[0].length){
//			System.out.println("i: "+i+"j: "+j);
			return true;
		}	
		if(a[i][j]==0&&flag[i][j]==0){
			flag[i][j] = 1;
			boolean right = Helper(a,i+1,j,flag);
			boolean left = Helper(a,i-1,j,flag);
			boolean up = Helper(a,i,j+1,flag);
			boolean down = Helper(a,i,j-1,flag);
			flag[i][j] = 0;
			return right||left||up||down;
		}
		return false;
	}
}

第二题:

第三题:

猜你喜欢

转载自blog.csdn.net/chenkaibsw/article/details/82414509