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