快手笔试

一二题100 ,第三题81 ,代码很丑但还是分享一下吧
第一题:
public int[] DistanceToHigher (int[] height) {
        // write code here
        int length = height.length ;
        int[] ans = new int[length] ;
        //未找到对应的人
        boolean flag = false ;
        for(int j = height.length - 1 ; j > 0 ; j--){
            flag = false ;
            int i = j -1 ;
            while(i >= 0){
                if(height[i] > height[j]){
                    flag = true ;
                    break ;
                }
                i-- ;
            }
            if(flag){
                ans[j] = j-i ;
            }
        }
        return ans ;
    }


第二题:
    public static int[] four(int[] nums){
        if(nums == null || nums.length <= 1){
            return new int[]{} ;
        }
//    判断最大数重复的情况
        boolean maxDump = false ;
        int max = Integer.MIN_VALUE ;
        int secondMax = Integer.MIN_VALUE ;
        ArrayList<Integer> list = new ArrayList<>() ;
        for(int i = 0 ; i < nums.length ; i++){

            if(nums[i] < max && nums[i] >= secondMax && !maxDump){
                list.add(i) ;
            }
            if(nums[i] > max){
                maxDump = false ;
                secondMax = max ;
                max = nums[i] ;
            } else if(nums[i] < max && nums[i] > secondMax){
                secondMax = nums[i] ;
            }else if(nums[i] == max){
                maxDump = true ;
            }
        }
        return list.stream().mapToInt(Integer::valueOf).toArray() ;
    }
    
第三题:
 public static ArrayList<String> five(String line){
        String[] nums = line.split(",") ;
    //存储nums[i]的豹子或顺子的长度
        int[] ans = new int[nums.length] ;    
    //判断当前的对应长度是豹子还是顺子得到的 ,因为输出的顺序豹子 > 顺子
        boolean[] flag = new boolean[nums.length] ;
        int max = Integer.MIN_VALUE ;
        for(int i = 0 ; i < nums.length ; i++){
        //判断一下当前位置的 对应的豹子数或者顺子数的数量 ,并判断是豹子还是顺子
            int baozi = isBaoZi(nums[i]) ;
            int shunzi = isShunZi(nums[i]) ;
            if(baozi >= shunzi){
                ans[i] = baozi ;
                flag[i] = true ;
            }else{
                ans[i] = shunzi ;
                flag[i] = false ;
            }
            max = Math.max(max , Math.max(baozi , shunzi));
        }
        ArrayList<String> list = new ArrayList<>() ;
        while(max >= 0){
//         先返回同牌数的豹子 再返回同牌数的顺子 ,牌数再递减
            for(int i = 0 ; i < ans.length ;i++){
                if(ans[i] == max && flag[i] == true){
                    list.add(nums[i]);
                }
            }
            for(int i = 0 ; i < ans.length ; i++){
                if(ans[i] == max && flag[i] == false){
                    list.add(nums[i]) ;
                }
            }
            max-- ;
        }
        return list;
   }
   public static int isBaoZi(String nums){
        int ans = 1 ;
        int max = 1 ;
        for(int i = 3 ; i <= 9 ;i++){
            if(nums.charAt(i) == nums.charAt(i+1)){
                ans++ ;
                max = Math.max(ans , max);
            }else{
                ans = 1 ;
            }
        }
        return max >= 3 ? max : -1 ;
   }
    public static int isShunZi(String nums){
        int max = 1 ;
        int ans = 1 ;
        for(int i = 3 ; i <= 9 ; i++){
            if((int)nums.charAt(i) == (int)nums.charAt(i+1)-1){
                ans++ ;
                max = Math.max(ans , max);
            }else{
                ans = 1 ;
            }
        }
        return max >=3 ? max : -1 ;
    }
    


#快手笔试##笔试题目##快手#
全部评论
顺便玄学求一波美团offer
点赞 回复 分享
发布于 2020-03-22 20:50
tql
点赞 回复 分享
发布于 2020-03-22 21:03
baozi shunzi哈哈哈跟我写的一样,不过我的一直报内存超限,Java不用自己写输入输出吗?感觉自己输在了输入输出上 # 快手笔试#
点赞 回复 分享
发布于 2020-03-22 21:09
第三题81应该是没考虑顺子也可能是倒过来的
点赞 回复 分享
发布于 2020-03-22 21:25

相关推荐

不愿透露姓名的神秘牛友
01-24 15:05
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
2
9
分享

创作者周榜

更多
牛客网
牛客企业服务