牛客小白月赛113 C题题解

连续数组

https://ac.nowcoder.com/acm/contest/105825/C

#include <bits/stdc++.h> using namespace std;

int main() { int q; cin >> q;

unordered_map<long long, int> hash;
long long min1 = 1000000000LL + 1, maxVal = 0;
while (q--) {
    int k;
    cin >> k;
    int arr[k]; 
    for (int i = 0; i < k; i++) {
        cin >> arr[i];
        if (i > 0 && arr[i] <= arr[i - 1]) {
            cout << "NO" << endl;
            return 0;
        }
        hash[arr[i]]++;
        if (hash[arr[i]] > 1) {
            cout << "NO" << endl;
            return 0;
        }
        if (arr[i] < min1) min1 = arr[i];
        if (arr[i] > maxVal) maxVal = arr[i]; 
    }    
}

for (long long i = min1; i <= maxVal; i++) {
    if (hash[i] != 1) {
        cout << "NO" << endl;
        return 0;
    }
}
cout << "YES" << endl;
return 0;

}

这道题就是直接找到最小值和最大值,判断这个区间每个数字出现有且仅有一次,个人认为hash function的对应可以做

全部评论
我以为这个是自我总结的地方,如果各位大佬对代码有更好的建议欢迎评论;这道题相当于我没有把所有数书写完成之后重新排序sort,而是通过建表,直接判断该值是否出现,而自动把数填充了;也算是第一次实战用hash,非常感谢能发现这么好的网站。
点赞 回复 分享
发布于 03-28 21:29 澳大利亚

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务