救!滴滴笔试第二题通过率只有55,哭啦
10月15号滴滴考试:
我想着用个三层的DFS就能算出所有可能,但是通过率一直是55%,还提示超时,这个题目不应该用DFS吗?还是说有更好的办法?
求大佬帮帮
第二题:
旅游 时间限制: 3000MS 内存限制: 589824KB 题目描述: 终于放假了。小A决定在假期期间出去旅游。她提前拟定了许多旅游路线,但预算只允许她选取三条路线旅游。 每条旅游路线会占用一段连续日期。在小A选择的所有路线中,任意两条路线所占用的日期不能有重叠部分。 现在她想知道有多少种选择三条互不冲突的路线的方案可以供她选择? 输入描述 第一行有一个正整数n(3<=n<=100000),代表小A拟定的路线数量。 第二行有n个正整数,第i个代表第i条路线的起始日期。 第三行有n个正整数,第i个代表第i条路线的终止日期。 输入保证起始日期不晚于终止日期。日期最大不超过1000000000。 输出描述 输出一个非负整数,代表所求的答案。 样例输入 6 4 1 3 2 1 2 4 1 3 3 2 2 样例输出 6 提示 共有六种方案: [1,1]-[2,2]-[3,3] [1,1]-[2,2]-[4,4] [1,1]-[2,3]-[4,4] [1,2]-[3,3]-[4,4] [1,1]-[3,3]-[4,4] [2,2]-[3,3]-[4,4]我的代码:
public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] start = new int[n]; int[] end = new int[n]; for(int i = 0; i < n; i ++){ start[i] = sc.nextInt(); } for(int i = 0; i < n; i ++){ end[i] = sc.nextInt(); } long[] result = new long[1]; int[] possible = new int[6]; helper(result, start, end, possible, 0); System.out.print(result[0]); } public static void helper(long[] result, int[] start, int[] end, int[] possible, int index){ if(index == 6){ result[0] ++; return; } for(int i = 0; i < start.length; i ++){ if(index == 0 || possible[index - 1] < start[i]){ possible[index] = start[i]; possible[index + 1] = end[i]; helper(result, start, end, possible, index + 2); } } }