字节跳动2019春招研发部分编程题

1.自动校对程序

import java.util.LinkedList;
import java.util.Scanner;

public class ByteDance1 {

    public static String solve(String s) {

        LinkedList<int[]> list = new LinkedList<>();

        for (int i = 0; i < s.length(); i++) {
            if (!list.isEmpty() && list.peekLast()[0] == s.charAt(i)-'a') {  //当链表非空且当前元素与尾部元素相同时
                if (list.peekLast()[1] == 2) //当链表尾部元素的频数等于2时,这时候不能再添加频数了
                    continue;
                else {
                    //当链表尾部元素的频数等于1时,需要分类讨论,先将链表尾部元素弹出
                    int[] tmp = list.pollLast();
                    //当链表不为空且尾部频数等于2时表明出现两对相同元素的情况,所以
                    if (!list.isEmpty() && list.peekLast()[1] == 2)
                        list.add(new int[]{tmp[0],1});
                    else{
                        list.add(new int[]{tmp[0],tmp[1]+1});
                    }

                }
            } else
                //链表为空或者链尾元素与当前元素不同,需要将当前元素加到尾部
                list.add(new int[]{s.charAt(i)-'a',1});
        }
        StringBuilder sb = new StringBuilder();
        while (!list.isEmpty()) {
            int[] tmp = list.pollFirst();
            for (int i = 0; i < tmp[1]; i++) {
                sb.append((char)(tmp[0]+'a'));
            }
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        /*
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        for(int i=0;i<n;i++){
            System.out.println(solve(in.nextLine()));
        }
         */
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        for(int i=0;i<n;i++){
            System.out.println(solve(in.next()));
        }
        String s = "wooooooowwhellloo";
        System.out.println(solve(s));
    }
}

2.特工

import java.util.Scanner;

public class ByteDance4 {


    public static int ret;
    public static int[] record;
    public static void recursive(int[] arr,int idx,int start,int D){

        if(idx==3){
            ret%=99997867;
            ret++;
            return;
        }
        //当数组剩余待选元素的数量小于record中未确定数字的槽位数量
        if(arr.length-start<3-idx)
            return;
        for(int i=start;i<arr.length;i++)
        {
            if(idx==0)
            {
                record[idx]=arr[i];
                recursive(arr,idx+1,i+1,D);
            }
            else if(arr[i]-record[0]>D)
                break;
            else
            {
                record[idx]=arr[i];
                recursive(arr,idx+1,i+1,D);
            }
        }
    }


    public static void main(String[] args)
    {
        /*
        Scanner in=new Scanner(System.in);
        int N=in.nextInt();
        int D=in.nextInt();
        int[] arr=new int[N];
        for(int i=0;i<N;i++)
            arr[i]=in.nextInt();
        ret=0;
        record=new int[3];
        recusive(arr,0,0,N,D);
        System.out.println(ret);
         */

        int N=5,D=19;
        int[] arr={1,10,20,30,50};
        ret=0;
        record=new int[3];
        recursive(arr,0,0,D);
        System.out.println(ret);
    }
}

3.特征提取

import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Scanner;

public class ByteDance3 {

    static class feature {
        int x;
        int y;

        public feature(int x, int y) {
            this.x = x;
            this.y = y;
        }

        public int hashCode() {
            return x * 20000 + y;
        }

        public boolean equals(Object obj){
            return this.hashCode()==obj.hashCode();
        }
    }


    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int N = in.nextInt();  //测试样例数目
        HashMap<feature, LinkedList<Integer>> map = new HashMap<>();
        for (int i = 0; i < N; i++) {
            int num = in.nextInt(); //帧数
            for (int j = 0; j < num; j++) {  //帧序数
                int n_coords = in.nextInt();

                for (int k = 0; k < n_coords; k++) {
                    int a = in.nextInt();
                    int b = in.nextInt();
                    feature f = new feature(a, b);
                    if (map.containsKey(f)) {
                        LinkedList<Integer> tmp = map.get(f);
                        if (tmp.peekLast() + 1 == j) {
                            tmp.pollLast();
                            tmp.add(j);
                        } else {
                            tmp.add(j);
                            tmp.add(j);
                        }

                    } else {
                        LinkedList<Integer> tmp = new LinkedList<>();
                        tmp.add(j);
                        tmp.add(j);
                        map.put(f, tmp);
                    }
                }
            }
            int ans = 0;
            for (feature f : map.keySet()) {
                LinkedList<Integer> tmp = map.get(f);
                while (!tmp.isEmpty()) {
                    int start = tmp.pollFirst();
                    int end = tmp.pollLast();
                    ans = Math.max(ans, end - start + 1);
                }
            }
            System.out.println(ans);
        }
    }
}

4.找零钱

import java.util.Scanner;

public class ByteDance5 {

    public static void main(String[] args)
    {
        Scanner in=new Scanner(System.in);
        int change=1024-in.nextInt();
        int[] arr={64,16,4,1};
        int res=0;
        for(int i=0;i<4;i++)
        {
            res+=change/arr[i];
            change%=arr[i];
        }
        System.out.println(res);
    }
}

猜你喜欢

转载自blog.csdn.net/To_be_to_thought/article/details/90080497