第五届字节跳动青训营后端基础班笔试编程题题解

后端基础班的编程第一题很明显是力扣原题:997. 找到小镇的法官

leetcode.cn/problems/fi…

思路

除了力扣官方的题解外,我们还能进一步优化如下(可能更适合小白):

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;
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林杰Jason

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值