第一次写笔试反馈,终于能过一回笔试了,前几次笔试被虐惨了
第一题,求k个链表***有的单词,用的是set,但是只有20%正确,不知道原因
import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; public class Main15 { /** * * @param values string字符串ArrayList<ArrayList<>> * @return string字符串ArrayList */ // 20%,不知道什么情况没考虑到 public ArrayList<String> findCommonString (ArrayList<ArrayList<String>> values) { // write code here int group = values.size(); HashSet<String> strSet = new HashSet<String>(); // values.get(0).iterator((Iterator<String> iterator )->{strSet.add(iterator.next())}); int size1=values.get(0).size(); for (int i = 0; i < size1; i++) { strSet.add(values.get(0).get(i)); } HashSet<String> strSet2 = new HashSet<String>(); for (int i = 1; i < group; i++) { ArrayList<String> curr = values.get(i); for (int j = 0; j < curr.size(); j++) { if (strSet.contains(curr.get(j))){ strSet2.add(curr.get(j)); } } strSet.clear(); strSet=null; strSet=strSet2; strSet2.clear(); } ArrayList<String> res = new ArrayList<String>(); Iterator<String> iterator = strSet.iterator(); while (iterator.hasNext()){ res.add(iterator.next()); } return res; } }
第二题,a+k和b+k都是完全平方数,求k(k<500),直接暴力法做的
public class Main16 { public static void main(String[] args) { } public int question (int a, int b) { // write code here int k=1; while (true){ if (k>500){ break; } if (func(a+k)&&func(b+k)) return k; k++; } // if (k>500) // 题目描述不清,没有值也没说怎么返回,难道肯定能找到? return -1; } public static boolean func(int a){ if ((int)Math.sqrt(a)==(int)a/Math.sqrt(a)){ return true; } return false; } }
第三题,
把数字转成有字母有什么种可能性?说明:0是a,25是z。如1,2可以表示为ab,也可以表示为m
动态规划
import java.util.Scanner; public class Main14 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int input = scanner.nextInt(); String str=""+input; int len = str.length(); int[] dp = new int[len]; dp[0]=1; dp[1]=func(str.substring(0,2))?2:1; for (int i = 2; i < len; i++) { if (func(str.substring(i-1,i+1))){ dp[i]=dp[i-1]+dp[i-2]; }else { dp[i]=dp[i-1]; } } System.out.println(dp[len-1]); } public static boolean func(String substr){ int twobitint=(substr.charAt(0)-'0')*10+(substr.charAt(1)-'0'); if (twobitint>=10 && twobitint<=25){ return true; } return false; } }
全部评论
(0) 回帖