博客
关于我
牛客网算法——名企高频面试题143题(2)
阅读量:797 次
发布时间:2023-03-29

本文共 852 字,大约阅读时间需要 2 分钟。

要解决的问题是从0到n这n+1个数中选择n个数,组成一个有序数组,然后找出缺失的那个数。目标是尽可能让时间复杂度O(n)最小。

分析过程:

  • 理解问题:给定一个长度为n的数组,该数组包含从0到n中选择的n个数。由于总共有n+1个数,数组中必然缺少一个数。我们需要找到这个缺失的数。

  • 求和方法:计算数组的总和,然后比较它与0到n的总和的差异。0到n的总和可以通过公式n*(n+1)/2计算得出。假设数组的总和为sum,那么缺失的数即为n*(n+1)/2 - sum。

  • 时间复杂度:该方法的时间复杂度为O(n),因为只需要遍历数组一次求和。

  • 解决方法代码:

    public class 缺失的数字 {    public int solve(int[] a) {        int sum = 0;        int n = a.length;        for (int i = 0; i < n; i++) {            if (sum == a[i]) {                sum++;            } else {                break;            }        }        return sum;    }}

    代码解释:

    • sum初始化:将变量sum初始化为0,用于计算数组的总和。
    • 遍历数组:通过循环遍历数组中的每个元素。
      • 如果当前元素等于sum,说明该元素是连续的,sum加1。
      • 如果当前元素不等于sum,说明已经找到缺失的位置,提前终止循环。
    • 返回结果:循环结束后,sum的值即为缺失的数。

    示例测试:

    @Testpublic void test() {    int i = solve(new int[]{0, 1, 2, 3, 4, 5, 7});    System.out.println(i);}

    输出结果:6

    这个方法通过一次遍历数组,高效地找到了缺失的数,时间复杂度为O(n),满足题目要求。

    转载地址:http://alhfk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现最短路径Dijsktra算法(附完整源码)
    查看>>
    Objective-C实现最短路径Dijsktra算法(附完整源码)
    查看>>
    Objective-C实现最短路径广度优先搜索算法(附完整源码)
    查看>>
    Objective-C实现最近点对问题(附完整源码)
    查看>>
    Objective-C实现最长公共子序列算法(附完整源码)
    查看>>
    Objective-C实现最长回文子串算法(附完整源码)
    查看>>
    Objective-C实现最长回文子序列算法(附完整源码)
    查看>>
    Objective-C实现最长子数组算法(附完整源码)
    查看>>
    Objective-C实现最长字符串链(附完整源码)
    查看>>
    Objective-C实现最长递增子序列算法(附完整源码)
    查看>>
    Objective-C实现有向图和无向加权图算法(附完整源码)
    查看>>
    Objective-C实现有序表查找算法(附完整源码)
    查看>>
    Objective-C实现有限状态机(附完整源码)
    查看>>
    Objective-C实现有限状态自动机FSM(附完整源码)
    查看>>
    Objective-C实现有限集上给定关系的自反关系矩阵和对称闭包关系矩阵(附完整源码)
    查看>>
    Objective-C实现服务程序自启动(附完整源码)
    查看>>
    Objective-C实现服务端客户端聊天室(附完整源码)
    查看>>
    Objective-C实现朴素贝叶斯算法(附完整源码)
    查看>>
    Objective-C实现杨氏3X3矩阵(附完整源码)
    查看>>
    Objective-C实现杰卡德距离算法(附完整源码)
    查看>>