1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| #include <vector> #include <algorithm> #include <climits> #include <unordered_map>
using std::vector; using std::unordered_map;
class Solution { public: int cel_div(int a, int b) { return (a + b - 1) / b; } int findSmallestInteger(vector<int> &nums, int value) {
int i; int n = nums.size(); int group = INT_MAX;
int res;
unordered_map<int, int> umap;
if (value == 1) { return n - 1; }
for (i = 0; i < n; i++) { if (nums[i] < 0) { nums[i] += cel_div(-nums[i], value) * value; } nums[i] = nums[i] % value; umap[nums[i]]++; }
for (i = 0; i < value; i++) { if (umap.count(i) == 0) { return i; } }
for (auto &[num, count] : umap) { if (count < group) { group = count; res = num; } else if (count == group) { res = std::min(res, num); } }
res += group * value - 1;
return res; } };
int main() { vector<int> vec = { 3, 2, 3, 1, 0, 1, 4, 2, 3, 1, 4, 1, 3 }; int value = 5; Solution s; s.findSmallestInteger(vec, value); }
|