Skip to content

Commit 673a8f6

Browse files
authored
Create minimum-operations-to-maximize-last-elements-in-arrays.cpp
1 parent 151fe32 commit 673a8f6

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// Time: O(n)
2+
// Space: O(1)
3+
4+
// simulation
5+
class Solution {
6+
public:
7+
int minOperations(vector<int>& nums1, vector<int>& nums2) {
8+
int cnt1 = 0, cnt2 = 0;
9+
for (int i = 0; i < size(nums1); ++i) {
10+
if (!(min(nums1[i], nums2[i]) <= min(nums1.back(), nums2.back()) &&
11+
max(nums1[i], nums2[i]) <= max(nums1.back(), nums2.back()))) {
12+
return -1;
13+
}
14+
if (!(nums1[i] <= nums1.back() && nums2[i] <= nums2.back())) {
15+
++cnt1;
16+
}
17+
if (!(nums1[i] <= nums2.back() && nums2[i] <= nums1.back())) {
18+
++cnt2;
19+
}
20+
}
21+
return min(cnt1, cnt2);
22+
}
23+
};
24+
25+
// Time: O(n)
26+
// Space: O(1)
27+
// simulation
28+
class Solution2 {
29+
public:
30+
int minOperations(vector<int>& nums1, vector<int>& nums2) {
31+
static const int INF = numeric_limits<int>::max();
32+
33+
const auto& count = [&](int mx1, int mx2) {
34+
int result = 0;
35+
for (int i = 0; i < size(nums1); ++i) {
36+
if (nums1[i] <= mx1 && nums2[i] <= mx2) {
37+
continue;
38+
}
39+
if (!(nums2[i] <= mx1 && nums1[i] <= mx2)) {
40+
return INF;
41+
}
42+
++result;
43+
}
44+
return result;
45+
};
46+
47+
const int result = min(count(nums1.back(), nums2.back()), count(nums2.back(), nums1.back()));
48+
return result != INF ? result : -1;
49+
}
50+
};

0 commit comments

Comments
 (0)