快手笔试
一二题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 ; }