排序加双指针
最开始的二重循环复杂度太大,跑不过数组长的实例。
Go版本:
import (
"fmt"
)
func numFriendRequests(ages []int) int {
sort.Ints(ages)
n:=len(ages);
count:=0;
i,j:=0,0;
for k:=0;k<n;k++{
// i看作y j看作x
for{
if i<k && !check(ages[i],ages[k]){
i++;
}else{
break;
}
}
if j<k{
j=k;
}
for{
if j<n && check(ages[j],ages[k]){
j++;
}else{
break;
}
}
if j>i{
count+=j-i-1;
}
}
return count;
}
func check(x int,y int) bool{
if y*10<=x*5+70 || y>x || (y>100 && x<100){
return false;
}
return true;
}
网友评论