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++回溯法解决1到9之间插入加减或空使运算结果为100

    c++回溯法解决1到9之间插入加减或空使运算结果为100

    编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 100
    2021-10-10
  • C++ 常量成员函数学习笔记

    C++ 常量成员函数学习笔记

    这篇文章主要为大家介绍了C++ 常量成员函数学习笔记,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • VS编译出现MSB3073命令的解决方案

    VS编译出现MSB3073命令的解决方案

    =error MSB3073是Visual Studio编译器报出的错误,本文主要介绍了VS编译出现MSB3073命令的解决方案,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • C++实现LeetCode(119.杨辉三角之二)

    C++实现LeetCode(119.杨辉三角之二)

    这篇文章主要介绍了C++实现LeetCode(119.杨辉三角之二),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • socket多人聊天程序C语言版(一)

    socket多人聊天程序C语言版(一)

    这篇文章主要为大家详细介绍了socket多人聊天程序C语言版,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • 详解散列表算法与其相关的C语言实现

    详解散列表算法与其相关的C语言实现

    这篇文章主要介绍了详解散列表算法与其相关的C语言实现,平时经常出现于各大考试竞赛与程序员面试题目当中,需要的朋友可以参考下
    2015-08-08
  • C语言实现流星雨效果流程

    C语言实现流星雨效果流程

    C本篇文章带你用C语言去实现漫天流星雨的效果,代码写的很清晰,效果非常棒,另有视频详解整个过程,相信你一定能看懂,感兴趣的童鞋快来看看吧
    2021-11-11
  • c++自定义sort()函数的排序方法介绍

    c++自定义sort()函数的排序方法介绍

    这篇文章主要介绍了c++自定义sort()函数的排序方法介绍,文章通过围绕主题展开详细的内容戒杀,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • C++简明分析讲解引用与函数提高及重载

    C++简明分析讲解引用与函数提高及重载

    今天继续开始对C++核心编程知识的分享与系统讲解,第一,这里会提到“引用”方法传参以及剖析引用的本质;第二,我们对函数来一个提高,相当于进阶函数了,包括函数的默认值,简单的提一下函数的占位参数,函数重载以及注意事项,接下来上正文
    2022-05-05
  • Qt图形图像开发曲线图表模块QChart库缩放/平移详细方法与实例

    Qt图形图像开发曲线图表模块QChart库缩放/平移详细方法与实例

    这篇文章主要介绍了Qt图形图像开发曲线图表模块QChart库缩放/平移详细方法与实例,需要的朋友可以参考下
    2020-03-03

最新评论