thoughtworks笔试题
1.交换相邻元素
输入:123456 输出:214365
输入:12345 输出:21435
package com.leetecode.examination.thoughtwork.swap; import java.util.Scanner; //交换相邻元素 //输入:123456 输出:214365 //输入:12345 输出:21435 public class SwapJoins { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num = sc.nextInt(); int[] arr = new int[num]; for (int i = 0; i < arr.length; ++i) { arr[i] = sc.nextInt(); } swapJoins(arr); } public static void swapJoins(int[] arr) { if(arr==null||arr.length==0){ return; } int temp=0,i=0; if (arr.length % 2 == 0) { //偶数 while(i<arr.length) { temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp; i=i+2; } }else{ //奇数 while(i<arr.length&&i+1<arr.length) { temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp; i = i + 2; } } for(int a:arr){ System.out.print(a+" "); } } }
2.设计一个计票器,输入候选人列表和投票结果,计算出每个候选人的票数、无效票数、获得票数最多的人
输入:["A","B","C"]
输入:["A","F","A","B","A","B","A","C","E"]
输出:A=4,B=2,C=1,invalidVotes=2 winner=A
思路:
1.treemap配合comparator比较器只能对key进行排序
2.要想对key和value进行排序,将map放入arraylist中:
List<Map.Entry<String,Integer>> list = new ArrayList<>(map.entrySet());
3.再使用集合排序(数组类似):
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o2.getValue()-o1.getValue(); //降序
}
});
package com.leetecode.examination.thoughtwork.countoken; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; //设计一个计票器,输入候选人列表和投票结果,计算出每个候选人的票数、无效票数、获得票数最多的人 //输入:["A","B","C"] //输入:["A","F","A","B","A","B","A","C","E"] //输出:A=4,B=2,C=1,invalidVotes=2 winner=A public class CountMachine { private static Map<String, Integer> map = new HashMap<>(); public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] candicates = br.readLine().trim().split(" "); //候选人 String[] votes = br.readLine().trim().split(" "); //投票情况 countMachine(candicates,votes); } public static Map<String,Integer> countMachine(String[] candicates, String[] votes){ if(candicates==null||votes==null){ return null; } int countvalid=0; for(int i=0;i<candicates.length;++i){ int count=0; for(int j=0;j<votes.length;++j){ if(candicates[i].equals(votes[j])){ count++; } } countvalid=countvalid+count; map.put(candicates[i],count); } map.put("invalidVotes",votes.length-countvalid); List<Map.Entry<String,Integer>> list = new ArrayList<>(map.entrySet()); Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() { @Override public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { return o2.getValue()-o1.getValue(); //降序 } }); if(list.get(0).getValue().equals(map.get("invalidVotes"))){ System.out.println("没有人获胜"); return null; }else{ for(Map.Entry<String,Integer> entry:list){ System.out.print(entry+" "); } System.out.print("winner:"+list.get(0).getKey()); } return null; } }
3.计算重复单词的数量
输入:I am so amazed by the sheer excellence of this boy,I am so so so grateful for this. so
输出:4
1.匹配逗号或者句号:[\.,]
2.replace(char oldChar, char newChar):用新字符替换旧字符
3.replace(CharSequence target, CharSequence replacement):同上,用新字符串替换就字符串
4.replaceAll(String regex, String replacement):用新字符串替换掉正则表达式匹配的所有字符串
5.replaceFirst(String regex, String replacement):用新字符串替换掉正则表达式匹配的第一个字符串
package com.leetecode.examination.thoughtwork.countreplicationword; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main1 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line = br.readLine(); String newStr = line.replaceAll("[\\.,]", " "); //匹配,或者. String[] word = newStr.trim().split(" "); //匹配空格 String targetWord = br.readLine(); System.out.println(countRepliCount(word,targetWord)); } private static int countRepliCount(String[] word,String targetWord) { int count=0; for(int i=0;i<word.length;++i){ if(word[i].equals(targetWord)){ count++; } } return count; } }