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;
    }

}
全部评论

相关推荐

三题看不懂四题不明白二题无法AC&nbsp;T=int(input())&nbsp;for&nbsp;_&nbsp;in&nbsp;range(T):&nbsp;n=int(input())&nbsp;s=input().split()&nbsp;k,mx=1,1&nbsp;for&nbsp;i&nbsp;in&nbsp;range(len(s)-1):&nbsp;if&nbsp;len(s[i])&lt;len(s[i+1]):&nbsp;k+=1&nbsp;elif&nbsp;len(s[i])==len(s[i+1]):&nbsp;if&nbsp;s[i]&lt;=s[i+1]:&nbsp;k+=1&nbsp;...
恭喜臭臭猴子:第二题用栈就行。合法的括号直接出栈了,剩下的是不合法的,肯定都得一个一个走。出入栈的过程中得记下进栈的括号的下标。最后栈里剩下的括号如果相邻两个的下标不连续,说明它们中间有一个合法的括号序列被出栈,结果加一
投递拼多多集团-PDD等公司10个岗位 > 拼多多求职进展汇总 笔试
点赞 评论 收藏
分享
认真搞学习:这个真喷不了,你是我见过最美的牛客女孩
点赞 评论 收藏
分享
评论
5
7
分享

创作者周榜

更多
牛客网
牛客企业服务