快手笔试

第一题:学生站队AC 100%
15分钟AC

public class Solution{
    public static int[] DistanceToHigher (int[] height) {
        if(height == null)
            return null;
        int len = height.length;
        int []dp = new int [len];
        dp[0] = 0;

        for (int i = 1; i < len; i++) {
            int j = i-1;
            while(j >= 0 && height[j] <= height[i]){
                j--;
            }
            if(j < 0)
                dp[i] = 0;
            else
                dp[i] = i-j;
        }
        return dp;
    }
}

第二题:从A[0]...A[i-1]中找出有且只有一个元素大于A[i]的情况 AC 100%

import java.util.ArrayList;
import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] s = sc.nextLine().split(" ");
        int N = s.length;
        int [] A = new int [N];
        for (int i = 0; i < N; i++) {
            A[i] = Integer.parseInt(s[i]);
        }

        if(N <= 1){
            System.out.println("-1");
            return ;
        }else if(N == 2){
            if(A[0] > A[1]){
                System.out.println("1");
                return ;
            }else{
                System.out.println("-1");
                return ;
            }
        }else{ //N>=3
            boolean flag = false;
            ArrayList<Integer>list = new ArrayList<Integer>();
            if(A[0] > A[1]){
                int t = 1;
                list.add(t);
                flag = true;
            }

            int max = A[0] > A[1] ? 0 : 1; //最大的
            int maxx = A[0] < A[1] ? 0 : 1;     //次大的
            for (int i = 2; i < N; i++) {
                if(A[max] != A[maxx] && A[i] >= A[maxx] &&  A[i] < A[max]){
                    list.add(i);
                    flag = true;
                }
                if(A[i] > A[max]){
                    int tmp = max;
                    max = i;
                    maxx = tmp;
                }else if(A[i] > A[maxx]){
                    maxx = i;
                }
            }
            if(!flag){
                System.out.println("-1");
            }
            for (int i = 0; i < list.size(); i++) {
                if(i!=list.size()-1){
                    System.out.print(list.get(i)+" ");
                }else{
                    System.out.print(list.get(i));
                }
            }
            return ;
        }
    }
}

第三题:手机靓号 AC 81.82%
动态规划O(N)找出顺子的位数或豹子的位数

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

public class Main1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] phone = sc.nextLine().split(",");
        if(phone.length == 0)
            System.out.println("null");
        ArrayList<String>list = new ArrayList<>();


        for (int i = 0; i < phone.length; i++) {
            String tmp = phone[i].substring(3);
            if(isShun(tmp) > 0 || isBao(tmp) > 0){
                list.add(phone[i]);
            }
        }

        if (list.size() == 0){
            System.out.println("null");
        }else{
            Collections.sort(list,new Comparator<String>() {
                @Override
                public int compare(String o1, String o2) {
                    int[] shunOrBao1 = isShunOrBao(o1.substring(3));
                    int[] shunOrBao2 = isShunOrBao(o2.substring(3));
                    if(shunOrBao1[1] > shunOrBao2[1]){
                        return -1;
                    }else if (shunOrBao1[1] < shunOrBao2[1]){
                        return 1;
                    }else{
                        if(shunOrBao1[0] == 1){
                            return 1;
                        }else if(shunOrBao2[0] == 1){
                            return -1;
                        }else{
                            return 0;
                        }
                    }
                }
            });

            for (int i = 0; i < list.size(); i++) {
                if(i!=list.size()-1){
                    System.out.print(list.get(i)+",");
                }else{
                    System.out.print(list.get(i));
                }
            }
        }
    }

    public static int[] isShunOrBao(String str){
        int [] result = new int [2];
        int shun = isShun(str);
        int bao = isBao(str);
        if(shun == 0){
            result[0] = 1; //表示豹子
            result[1] = bao;
        }else if(bao == 0){
            result[0] = 0; //表示顺子
            result[1] = shun;
        }else{
            if(bao >= shun){
                result[0] = 1;
                result[1] = bao;
            }else {
                result[0] = 0;
                result[1] = shun;
            }
        }
        return result;
    }


    public static int isShun(String str){
        int shun = 0; //顺子的位数
        int [] dp = new int [str.length()];
        dp[0] = 1;
        for (int i = 1; i < str.length(); i++) {
            if(str.charAt(i) == str.charAt(i-1)){
                dp[i] = dp[i-1] + 1;
            }else{
                dp[i] = 1;
            }
        }
        for (int i = 0; i < dp.length; i++) {
            if(dp[i] >= 3 && shun < dp[i]){
                shun = dp[i];
            }
        }
        return shun;
    }

    public static int isBao(String str){
        int bao = 0; //豹子的位数
        int [] dp = new int[str.length()];
        dp[0] = 1;
        for (int i = 1; i < str.length(); i++) {

            if(str.charAt(i) == (str.charAt(i-1) + 1)){
                dp[i] = dp[i-1] + 1;
            }else{
                dp[i] = 1;
            }
        }

        for (int i = 0; i < dp.length; i++) {
            if(dp[i] >= 3 && bao < dp[i]){
                bao = dp[i];
            }
        }
        return bao;
    }
}

第四题: AC 0%

继续努力,加油!!!

全部评论
收到
点赞 回复 分享
发布于 2020-04-02 09:55
楼主收到面试通知没
点赞 回复 分享
发布于 2020-03-26 14:07

相关推荐

来个厂收我吧:首先,市场侧求职我不是很懂。 但是,如果hr把这份简历给我,我会觉得求职人不适合做产品经理。 问题点: 1,简历的字体格式不统一,排版不尽如人意 2,重点不突出,建议参考star法则写个人经历 3,印尼官方货币名称为印度尼西亚卢比(IDR),且GMV690000印尼盾换算为305人民币,总成交额不高。 4,右上角的意向职位在发给其他公司时记得删除。 5,你所有的经历都是新媒体运营,但是你要投市场营销岗位,jd和简历不匹配,建议用AI+提示词,参照多个jd改一下经历内容。 修改建议: 1,统一字体(中文:思源黑体或微软雅黑,英文数字:time new romans),在word中通过表格进行排版(b站学) 2,校招个人经历权重:实习经历=创业经历(大创另算)>项目经历>实训经历>校园经历 3,请将项目经历时间顺序改为倒序,最新的放最上方。 4,求职方向不同,简历文字描述侧重点也需要不同。
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务