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++实现归并排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • 如何基于C++解决RTSP取流报错问题

    如何基于C++解决RTSP取流报错问题

    这篇文章主要介绍了如何基于C++解决RTSP取流报错问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • c++ 巧开平方的实现代码

    c++ 巧开平方的实现代码

    如果没有计算器,我们如何求2的平方根
    2013-05-05
  • 全排列算法的非递归实现与递归实现的方法(C++)

    全排列算法的非递归实现与递归实现的方法(C++)

    本篇文章是对全排列算法的非递归实现与递归实现的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C语言中联合体与共用体和枚举使用语法示例

    C语言中联合体与共用体和枚举使用语法示例

    这篇文章主要介绍了C语言中联合体与共用体和枚举使用语法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-12-12
  • C++ STL中常见的算法使用方式

    C++ STL中常见的算法使用方式

    这篇文章主要介绍了C++ STL中常见的算法使用方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • 详解_beginthreadex()创建线程

    详解_beginthreadex()创建线程

    这篇文章主要介绍了详解_beginthreadex()创建线程,使用_beginthreadex(),需要的头文件支持#include <process.h> 下面我们就来看看具体的实现吧
    2022-01-01
  • C++中继承与多态的基础虚函数类详解

    C++中继承与多态的基础虚函数类详解

    这篇文章主要给大家介绍了关于C++中继承与多态的基础虚函数类的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • C++实现高校教室管理系统

    C++实现高校教室管理系统

    这篇文章主要为大家详细介绍了C++实现高校教室管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Visual Studio 2022中创建的C++项目无法使用万能头<bits/stdc++.h>的解决方案

    Visual Studio 2022中创建的C++项目无法使用万能头<bits/stdc++.h>的

    如果大家也遇到下面这种问题,可能是没有include文件夹中没有bits/stdc++.h,这篇文章主要介绍了Visual Studio 2022中创建的C++项目无法使用万能头<bits/stdc++.h>的解决方案,感兴趣的朋友跟随小编一起看看吧
    2024-02-02

最新评论