4.1携程Java笔试
第一题写一个sql语法分析,分析出sql中的表名,临时表不算,按最简单的sql输出了一下,11%
第二题商旅问题感觉是最优子集问题,前两天leetcode有类似的,穷举ac了,第二题默认输出-1都有27%的用例通过
第二题暴力ac
public class Main { static ArrayList<List<Integer>> plans = new ArrayList<>(); public static void main(String[] args) { int res = -1; Scanner sc = new Scanner(System.in); //权益数 int n = Integer.parseInt(sc.nextLine()); String packagesIn = sc.nextLine(); String[] s = packagesIn.split(" "); ArrayList<List<Integer>> packageList = new ArrayList<>(); //填充权益包 for(String string:s){ String[] vArray = string.split(","); ArrayList<Integer> vList = new ArrayList<>(); for(String v:vArray){ vList.add(Integer.parseInt(v)); } packageList.add(vList); } int packageNum = s.length; int[] price = new int[packageNum]; String priceIn = sc.nextLine(); String[] ps = priceIn.split(" "); for(int i=0;i<packageNum;i++){ price[i] = Integer.parseInt(ps[i]); } String valuesIn = sc.nextLine(); String[] vs = valuesIn.split(" "); int[] values = new int[vs.length]; for(int i=0;i<vs.length;i++){ values[i] = Integer.parseInt(vs[i]); } //先穷举吧 dfs(false,0,packageList,new ArrayList<Integer>(),values); if(plans.size()>0){ for (List<Integer> plan : plans) { int jiage = 0; for (int p : plan) { jiage += price[p]; } if (res == -1) { res = jiage; } else { res = Math.min(res, jiage); } } } //先测测有多少-1用例嘿嘿 System.out.println(res); } public static void dfs(boolean choosePre,int cur,List<List<Integer>> packageList,List<Integer> curChoose,int[] values){ if(cur == packageList.size()){ boolean allFind = !(curChoose.size()==0); for(int value:values){ boolean find = false; for(int i=0;i<curChoose.size();i++){ int pIndex = curChoose.get(i); List<Integer> quanyiList = packageList.get(pIndex); for(int quanyi:quanyiList){ if(quanyi==value){ find=true; break; } } if(find){ break; }else if(i==curChoose.size()-1){ allFind=false; } } } //全部符合,加入计划 if(allFind){ plans.add(new ArrayList<Integer>(curChoose)); } return; } dfs(false, cur + 1, packageList,curChoose,values); curChoose.add(cur); dfs(true,cur + 1, packageList,curChoose,values); curChoose.remove(curChoose.size()-1); } }