第五届字节跳动青训营后端基础班笔试编程题题解
后端基础班的编程第一题很明显是力扣原题:997. 找到小镇的法官
思路
除了力扣官方的题解外,我们还能进一步优化如下(可能更适合小白):
1.如果存在法官,那么所有人都会信任法官,再结合条件1,可以得出信任法官的人数为n-1。
2.如果不存在法官,那么也可能存在某些人被所有人信任,这个人的信任人数也为n-1,但是他也会信任别人。
3.以此来区分other和judge。假设每个人都有信任值,那么定义一个数组长度为n,用来存放n个人的信任值:
1)如果一个人信任了别人,那么将这个人的信任值-1
2)如果一个人被别人信任,那么这个人的信任值+1
当一个人被所有人信任,并且他没有信任其它人时,这个人的信任值就是n- 1,那么此人就是法官。
当一个人被所有人信任,但是他也信任了其他人时,这个人的信任值<n - 1。
代码
public int findJudge(int N, int[][] trust) {
int []trusted = new int[N];
for (int [] arr : trust){
trusted[arr[0]-1]--;
trusted[arr[1]-1]++;
}
for (int i=0;i<N;i++){
if (trusted[i]==N-1){
return i+1;
}
}
return -1;
}
小孩排队(一个圈)
其实就是小孩排队问题
// 从右往左冒泡
// @s 小孩队列
// @move 该移动的小孩,'B'为男孩,'G'为女孩
public static int bubbleCount(char[] s, char move) {
int count = 0;
for (int i = 0; i < s.length - 1; i++) {
for (int j = s.length - 1; j > i; j--) {
// 若相邻两小孩性别不同,需要调换
if (s[j] == move && s[j] != s[j - 1]) {
swap(s[j], s[j - 1]);
count++;
}
}
}
return count;
}