C/C++哈希表优化LeetCode题解997找到小镇的法官

 更新时间:2022年12月28日 10:35:20   作者:彤哥来刷题啦  
这篇文章主要为大家介绍了C/C++哈希表优化题解997找到小镇的法官示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

方法一、哈希表

今天这道题比较简单,我们可以统计每个人信任别人的数量和被信任的数量,如果存在某个人信任别人的数量为0,且被信任的数量为 n-1,那么,这个人就是法官。

因为本题的数据范围为 [1,1000],数据范围比较小,所以,直接使用数组作为哈希表来使用。

请看代码:

class Solution {
    public int findJudge(int n, int[][] trust) {
        // 不信任任何人的人 & 被所有人信任的人
        // 计算每个人信任的人的数量和被信任的数量
        // 前者等于0,后者等于n-1
        int[][] arr = new int[n + 1][2];
        for (int[] t : trust) {
            // 0表示信任别人
            arr[t[0]][0]++;
            // 1表示被别人信任
            arr[t[1]][1]++;
        }
        
        for (int i = 1; i <= n; i++) {
            if (arr[i][0] == 0 && arr[i][1] == n - 1) {
                return i;
            }
        }
                return -1;
    }
}
  • 时间复杂度:O(m),m 为 trust 数组的长度。
  • 空间复杂度:O(n)。

运行结果如下:

方法二、优化

方法一中,我们使用了一个二维数组的第二维表示信任别人的数量和被别人信任的数量,其实,我们也可以使用一个一维数组来求解, 减一表示信任别人的数量,加一表示被别人信任的数量,那么,只有法官才可能达到 n-1 的总数量。

请看代码:

class Solution {
    public int findJudge(int n, int[][] trust) {
        // 不信任任何人的人 & 被所有人信任的人
        int[] arr = new int[n + 1];
        for (int[] t : trust) {
            // 减一表示信任别人
            arr[t[0]]--;
            // 加一表示被别人信任
            arr[t[1]]++;
        }
        
        for (int i = 1; i <= n; i++) {
            // 因为被别人信任不可能超过 n-1
            // 所以,只有法官能达到 n-1
            // 且法官信任别人数量为 0
            // 所以,总的数量为 n-1
            if (arr[i] == n - 1) {
                return i;
            }
        }
                return -1;
    }
}
  • 时间复杂度:O(m),m 为 trust 数组的长度。
  • 空间复杂度:O(n)。

以上就是C/C++哈希表优化LeetCode题解997找到小镇的法官的详细内容,更多关于C/C++哈希表优化找到小镇法官的资料请关注脚本之家其它相关文章!

相关文章

  • C++中的数组你真的理解了吗

    C++中的数组你真的理解了吗

    这篇文章主要为大家详细介绍了C++的数组,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • C语言解决堆栈括号匹配问题示例详解

    C语言解决堆栈括号匹配问题示例详解

    这篇文章主要为大家介绍了C语言堆栈括号匹配问题示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2021-11-11
  • 用C语言实现扫雷游戏

    用C语言实现扫雷游戏

    这篇文章主要为大家详细介绍了用C语言实现扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • C++实现动态顺序表

    C++实现动态顺序表

    这篇文章主要为大家详细介绍了C++实现动态顺序表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • C语言编程内存分配通讯录静态实现示例代码教程

    C语言编程内存分配通讯录静态实现示例代码教程

    这篇文章主要为大家介绍了C语言编程实现静态的通讯录示例代码教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2021-10-10
  • C++详细讲解print缓冲区的刷新

    C++详细讲解print缓冲区的刷新

    这篇文章主要介绍了print缓冲区刷新问题,实现代码简单易懂,具有很好的参考价值,希望对大家有所帮助,需要的朋友可以参考下
    2022-05-05
  • c++输出斐波那契数列示例分享

    c++输出斐波那契数列示例分享

    这篇文章主要介绍了c++输出斐波那契数列示例,需要的朋友可以参考下
    2014-03-03
  • C语言实现获取文件MD5值

    C语言实现获取文件MD5值

    MD5(Message Digest Algorithm 5)是一种常用的哈希函数算法,这篇文章主要介绍了C语言如何获取文件MD5值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-08-08
  • C++STL函数和排序算法的快排以及归并排序详解

    C++STL函数和排序算法的快排以及归并排序详解

    这篇文章主要为大家详细介绍了C++STL函数和排序算法的快排以及归并排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • C++STL之vector模板类详解

    C++STL之vector模板类详解

    这篇文章主要为大家详细介绍了C++vector模板类,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03

最新评论