## Weekly Contest 315

### 2441. Largest Positive Integer That Exists With Its Negative

Given an integer array nums that does not contain any zeros, find the largest positive integer k such that -k also exists in the array.

Return the positive integer k. If there is no such integer, return`-1`

.

#### O(n) time

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

int findMaxK(vector<int>& nums) {
unordered_map<int, int> mp;
int ans = INT_MIN, key;
for(auto e: nums){
if(mp[-e]){
key = e > 0 ? e : -e;
ans = max(ans, key);
}
mp[e]++;
}
return ans == INT_MIN ? -1 : ans;
}

#### O(1) space

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

int findMaxK(vector<int>& nums) {
sort(nums.begin(), nums.end());
int l = 0, r = nums.size() - 1;
while(l < r){
if(nums[l]*-1 == nums[r])
return nums[r];
else if (nums[l]*-1 < nums[r])
r--;
else
l++;
}
return -1;
}

### 2442. Count Number of Distinct Integers After Reverse Operations

You are given an array nums consisting of **positive** integers.

You have to take each integer in the array, **reverse** its digits, and add it to the end of the array. You should apply this operation to the original integers in nums.

Return the number of **distinct** integers in the final array.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

int rev_num(int n){
int rev = 0;
while(n){
rev = rev * 10 + (n%10);
n /= 10;
}
return rev;
}
int countDistinctIntegers(vector<int>& nums) {
unordered_map<int, int> mp;
for(auto e: nums) {
mp[e]++;
mp[rev_num(e)]++;
}
return mp.size();
}

### 2443. Sum of Number and Its Reverse

Given a non-negative integer num, return `true`

if num can be expressed as the sum of any non-negative integer and its reverse, or `false`

otherwise.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

int rev(int n){
int rev = 0;
while(n){
rev = (rev*10) + (n%10);
n /= 10;
}
return rev;
}
bool sumOfNumberAndReverse(int num) {
if((num%11 == 0 && num < 100) || (num%2 == 0 && num < 20)) return true;
for(int i=1; i<=num/2; i++)
if(i + rev(i) == num)
return true;
return false;
}