• 算法训练数字盒子


    /*
    题目:对于一个盒子S,要求进行插入以及删除操作,输出是否操作成功 数字的范围:10^5(60%)~10^18
    */
    #include <bits/stdc++.h>
    using namespace std;
    //Mod:哈希函数的模数
    //table:哈希表
    const int Mod = 1000003;
    vector<ll> table[Mod];
    typedef long long ll;
    //这是一个哈希表
    int Hash(ll x) {
    return x % Mod;
    }
    bool check(int op,ll x){
    int h = Hash(x);//求出x的哈希值
    //在哈希表中找到x
    vector<ll>::iterator ptr = table[h].end();
    for(vector<ll>::iterator it = table[h].begin();it != table[h].end();it ++){
    if(x == it){
    ptr = it;
    break;
    }
    }
    if(op == 1){//如果op为1,那么执行插入操作
    if(ptr == table[h].end()){ //什么情况下能成功插入呢?
    table[h].push_back(x);
    return 1;
    }
    return 0;
    }else{ //如果op为2,那么就执行删除操作
    if(ptr != table[h].end()){ //什么情况下能删除成功呢?
    *ptr = table[h].back();//back:返回当前vector容器中末尾元素的引用。
    table[h].pop_back();
    return 1;
    }
    return 0;
    }
    }

  • 相关阅读:
    git stash回退
    基于git tag快速修复
    Go语言开发规范
    defer实现原理
    string数据结构
    关于const iota
    struct
    map数据结构底层详解
    go 函数进阶
    go 内存分配原理
  • 原文地址:https://www.cnblogs.com/drcm/p/9941986.html
Copyright © 2020-2023  润新知