zoukankan      html  css  js  c++  java
  • 找到 N 个数字中缺少的数字

    题意如题 找到 N 个数字中缺少的一个数字

    方法 1:求和

       算出 1 + 2 + ... + N 的和然后减去数组中 N - 1 个数字的和

    int missNum(int N, int a[maxn]) {
        long long sum = 0;
        for(int i = 0; i < N - 1; i ++)
            sum += a[i];
    
        return (1 + N) * N / 2 - sum;
    }
    

      这个方法的缺点是有可能会出现溢出 时间复杂度是 O(N) 

    方法2:位运算

       用与运算 a ^ a = 0 a ^ a ^ b = b 所以可以用位运算实现

    int missNum(int N, int a[maxn]) {
        int ans = N;
    
        for(int i = 0; i < N - 1; i ++)
            ans ^= (a[i] ^ (i + 1));
    
        return ans;
    }
    

      时间复杂度 O(N) 

    方法3:二分法

       如果无序数组要先排序 在此假设数组有序

    #include <bits/stdc++.h>
    using namespace std;
    
    const int maxn = 1e5 + 10;
    int N;
    int a[maxn];
    
    int main() {
        scanf("%d", &N);
        for(int i = 0; i < N - 1; i ++)
            scanf("%d", &a[i]);
    
        int l = 0, r = N - 1, mid;
        while(l <= r) {
            mid = (l + r) / 2;
            if(a[mid] == mid + 1) l = mid +1;
            else r = mid - 1;
        }
    
        printf("%d
    ", mid + 1);
    
        return 0;
    }
    

      

  • 相关阅读:
    JavaScript
    monkeyrunner总结
    repo简介
    android4.4 settings 中控制卡1 卡2都振动
    卡1卡2设置不同的默认铃声
    获取布局 ActionBar
    android Settings 解析
    设置应用中出现NFC服务,去掉
    判断当前网络显示运营商
    设置中默认铃声 通知 闹钟等
  • 原文地址:https://www.cnblogs.com/zlrrrr/p/13271816.html
Copyright © 2011-2022 走看看