Skip to content

Commit 7448101

Browse files
committed
0561 main2 codes and comments updated.
1 parent 78eed94 commit 7448101

File tree

1 file changed

+17
-12
lines changed
  • 0501-1000/0561-Array-Partition-I/cpp-0561

1 file changed

+17
-12
lines changed

0501-1000/0561-Array-Partition-I/cpp-0561/main2.cpp

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,41 @@
11
/// Source : https://leetcode.com/problems/array-partition-i/solution/
22
/// Author : liuyubobobo
33
/// Time : 2018-06-04
4+
/// Updated: 2022-06-15
45

56
#include <iostream>
67
#include <vector>
78

89
using namespace std;
910

10-
/// Using HashMap
11-
/// Time Complexity: O(n)
12-
/// Space Complexity: O(n)
11+
12+
/// Counting Sort based
13+
/// Time Complexity: O(n + (maxv - minv))
14+
/// Space Complexity: O(maxv - minv)
1315
class Solution {
1416
public:
1517
int arrayPairSum(vector<int>& nums) {
1618

17-
int hash[20001];
18-
memset(hash, 0, sizeof(hash));
19+
int maxv = *max_element(nums.begin(), nums.end());
20+
int minv = *min_element(nums.begin(), nums.end());
21+
22+
vector<int> cnt(maxv - minv + 2, 0);
23+
int offset = -minv;
1924

2025
for(int num: nums)
21-
hash[num + 10000] ++;
26+
cnt[num + offset] ++;
2227

2328
int sum = 0;
2429
bool minus = false;
25-
for(int i = 0 ; i <= 20000 ; i ++)
26-
if(hash[i]){
30+
for(int i = 0 ; i < cnt.size(); i ++)
31+
if(cnt[i]){
2732
if(minus){
28-
hash[i] --;
33+
cnt[i] --;
2934
minus = false;
3035
}
31-
sum += hash[i] / 2 * (i - 10000);
32-
if(hash[i] % 2){
33-
sum += (i - 10000);
36+
sum += cnt[i] / 2 * (i - offset);
37+
if(cnt[i] % 2){
38+
sum += (i - offset);
3439
minus = true;
3540
}
3641
}

0 commit comments

Comments
 (0)