C/C++ | LeetCode
Open in Telegram
Π‘Π°ΠΉΡ: https://easyoffer.ru/ ΠΡΠ΅ ΠΊΠ°Π½Π°Π»Ρ: t.me/+xGeAw6ckJ4liYzQy ΠΠΎΠ½ΡΠ°ΠΊΡ Π΄Π»Ρ ΡΠ΅ΠΊΠ»Π°ΠΌΡ: @easyoffer_adv
Show more3 239
Subscribers
+124 hours
+77 days
-430 days
Posts Archive
3 239
ΠΠ°Π΄Π°ΡΠ°: 23. Merge k Sorted Lists
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: medium
ΠΠ°ΠΌ Π΄Π°Π½ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ· k ΡΠΏΠΈΡΠΊΠΎΠ² ΡΠ²ΡΠ·Π°Π½Π½ΡΡ
ΡΠΏΠΈΡΠΊΠΎΠ², ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΡ. ΠΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΠ΅ Π²ΡΠ΅ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΡΠΏΠΈΡΠΊΠΈ Π² ΠΎΠ΄ΠΈΠ½ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΈ Π²Π΅ΡΠ½ΠΈΡΠ΅ Π΅Π³ΠΎ.
ΠΡΠΈΠΌΠ΅Ρ:
Input: lists = [[1,4,5],[1,3,4],[2,6]] Output: [1,1,2,3,4,4,5,6]π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ min-ΠΊΡΡΡ, Π³Π΄Π΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ·Π»ΠΎΠ². 2β£ΠΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ Π² ΠΊΡΡΡ ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π²ΡΠ΅Ρ Π½Π΅ΠΏΡΡΡΡΡ ΡΠΏΠΈΡΠΊΠΎΠ². 3β£ΠΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΠΈ Π΅ΡΠ»ΠΈ Ρ Π½Π΅Π³ΠΎ Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ β ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ Π΅Π³ΠΎ Π² ΠΊΡΡΡ. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class compare {
public:
bool operator()(ListNode* a, ListNode* b) {
return a->val > b->val;
}
};
class Solution {
public:
ListNode* mergeKLists(vector<ListNode*>& lists) {
if (lists.empty()) return NULL;
priority_queue<ListNode*, vector<ListNode*>, compare> minheap;
for (int i = 0; i < lists.size(); i++) {
if (lists[i] != NULL)
minheap.push(lists[i]);
}
ListNode* head = NULL;
ListNode* temp1;
while (!minheap.empty()) {
ListNode* temp = minheap.top();
minheap.pop();
if (head == NULL) {
head = temp;
temp1 = temp;
} else {
temp1->next = temp;
temp1 = temp;
}
if (temp->next != NULL) {
minheap.push(temp->next);
}
}
if (temp1 != NULL)
temp1->next = NULL;
return head;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 1007. Minimum Domino Rotations For Equal Row
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: medium
Π ΡΡΠ΄Ρ Π΄ΠΎΠΌΠΈΠ½ΠΎ, tops[i] ΠΈ bottoms[i] ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ Π²Π΅ΡΡ
Π½ΡΡ ΠΈ Π½ΠΈΠΆΠ½ΡΡ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΊΠΈ i-Π³ΠΎ Π΄ΠΎΠΌΠΈΠ½ΠΎ. (ΠΠΎΠΌΠΈΠ½ΠΎ - ΡΡΠΎ ΠΏΠ»ΠΈΡΠΊΠ° Ρ Π΄Π²ΡΠΌΡ ΡΠΈΡΠ»Π°ΠΌΠΈ ΠΎΡ 1 Π΄ΠΎ 6 - ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ ΠΏΠ»ΠΈΡΠΊΠΈ.) ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ²Π΅ΡΠ½ΡΡΡ i-Π΅ Π΄ΠΎΠΌΠΈΠ½ΠΎ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ tops[i] ΠΈ bottoms[i] ΠΏΠΎΠΌΠ΅Π½ΡΠ»ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ. ΠΠ΅ΡΠ½ΠΈΡΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ²ΠΎΡΠΎΡΠΎΠ², ΡΡΠΎΠ±Ρ Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ tops Π±ΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ ΠΈΠ»ΠΈ Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ bottoms Π±ΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ. ΠΡΠ»ΠΈ ΡΡΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, Π²Π΅ΡΠ½ΠΈΡΠ΅ -1.
ΠΡΠΈΠΌΠ΅Ρ:
Input: tops = [2,1,2,4,2,2], bottoms = [5,2,6,2,3,2] Output: 2π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠΎΠ²: ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΄Π²Π° ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠ° Π΄Π»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΡΠ΅Π»ΠΈ: tops[0] ΠΈ bottoms[0]. ΠΡΠΎ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΡ Π΄Π»Ρ ΡΠ½ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΡΡΠ΄Ρ Π΄ΠΎΠΌΠΈΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΅ΡΠ»ΠΈ Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΡΠΈΡ Π΄Π²ΡΡ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π² Π²Π΅ΡΡ Π½Π΅ΠΉ ΠΈΠ»ΠΈ Π½ΠΈΠΆΠ½Π΅ΠΉ ΡΡΡΠΎΠΊΠ΅ Π²ΡΠ΅Ρ Π΄ΠΎΠΌΠΈΠ½ΠΎ. 2β£ΠΠΎΠ΄ΡΡΠ΅Ρ ΠΏΠΎΠ²ΠΎΡΠΎΡΠΎΠ² Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠ°: ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠΎΠ² (tops[0] ΠΈ bottoms[0]) ΠΏΠΎΠ΄ΡΡΠΈΡΠ°ΠΉΡΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ²ΠΎΡΠΎΡΠΎΠ², Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π΄Π»Ρ ΡΠ½ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π²ΠΎ Π²ΡΠ΅Ρ tops ΠΈΠ»ΠΈ Π²ΠΎ Π²ΡΠ΅Ρ bottoms. ΠΡΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΄ΠΎΠΌΠΈΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ²Π΅ΡΠ½ΡΡ Π΄Π»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠ°, ΡΡΠΎΡ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ ΠΈΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΠ· ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ. 3β£ΠΠΎΠ·Π²ΡΠ°Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΠΎΠ²ΠΎΡΠΎΡΠΎΠ²: ΠΠ΅ΡΠ½ΠΈΡΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ²ΠΎΡΠΎΡΠΎΠ² ΠΈΠ· Π²ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠΎΠ². ΠΡΠ»ΠΈ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ, Π²Π΅ΡΠ½ΠΈΡΠ΅ -1. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
int minDominoRotations(vector<int>& tops, vector<int>& bottoms) {
auto check = [&](int x) {
int rotations_a = 0, rotations_b = 0;
for (int i = 0; i < tops.size(); ++i) {
if (tops[i] != x && bottoms[i] != x) {
return -1;
} else if (tops[i] != x) {
rotations_a++;
} else if (bottoms[i] != x) {
rotations_b++;
}
}
return min(rotations_a, rotations_b);
};
int rotations = check(tops[0]);
if (rotations != -1 || tops[0] == bottoms[0]) {
return rotations;
} else {
return check(bottoms[0]);
}
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 728. Self Dividing Numbers
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: hard
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, 128 ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΌΠΎΡΠ°Π·Π΄Π΅Π»ΡΡΡΠΈΠΌΡΡ ΡΠΈΡΠ»ΠΎΠΌ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ 128 % 1 == 0, 128 % 2 == 0 ΠΈ 128 % 8 == 0. Π‘Π°ΠΌΠΎΡΠ°Π·Π΄Π΅Π»ΡΡΡΠ΅Π΅ΡΡ ΡΠΈΡΠ»ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠΈΡΡΡ Π½ΠΎΠ»Ρ. ΠΡΠ»ΠΈ Π΄Π°Π½Ρ Π΄Π²Π° ΡΠ΅Π»ΡΡ
ΡΠΈΡΠ»Π° left ΠΈ right, Π²Π΅ΡΠ½ΠΈΡΠ΅ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ
ΡΠ°ΠΌΠΎΡΠ°Π·Π΄Π΅Π»ΡΡΡΠΈΡ
ΡΡ ΡΠΈΡΠ΅Π» Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [left, right].
ΠΡΠΈΠΌΠ΅Ρ:
Input: left = 1, right = 22 Output: [1,2,3,4,5,6,7,8,9,11,12,15,22]π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£ΠΠ΅ΡΠ΅Π±Π΅ΡΠΈΡΠ΅ Π²ΡΠ΅ ΡΠΈΡΠ»Π° Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ left Π΄ΠΎ right. 2β£ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΠΎΠ½ΠΎ ΡΠ°ΠΌΠΎΡΠ°Π·Π΄Π΅Π»ΡΡΡΠΈΠΌΡΡ: Π Π°Π·Π΄Π΅Π»ΠΈΡΠ΅ ΡΠΈΡΠ»ΠΎ Π½Π° Π΅Π³ΠΎ ΡΠΈΡΡΡ. Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π½ΠΈ ΠΎΠ΄Π½Π° ΡΠΈΡΡΠ° Π½Π΅ ΡΠ°Π²Π½Π° Π½ΡΠ»Ρ ΠΈ ΡΠΈΡΠ»ΠΎ Π΄Π΅Π»ΠΈΡΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΡ ΠΈΠ· ΡΠ²ΠΎΠΈΡ ΡΠΈΡΡ Π±Π΅Π· ΠΎΡΡΠ°ΡΠΊΠ°. 3β£ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ°ΠΌΠΎΡΠ°Π·Π΄Π΅Π»ΡΡΡΠΈΠ΅ΡΡ ΡΠΈΡΠ»Π° Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΈΠ²Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΈ Π²Π΅ΡΠ½ΠΈΡΠ΅ Π΅Π³ΠΎ. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
#include <vector>
using namespace std;
class Solution {
public:
vector<int> selfDividingNumbers(int left, int right) {
vector<int> result;
for (int num = left; num <= right; num++) {
if (isSelfDividing(num)) {
result.push_back(num);
}
}
return result;
}
private:
bool isSelfDividing(int num) {
int n = num;
while (n > 0) {
int digit = n % 10;
if (digit == 0 || num % digit != 0) {
return false;
}
n /= 10;
}
return true;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 1238. Circular Permutation in Binary Representation
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: medium
ΠΠ°ΠΌ Π΄Π°Π½ ΠΌΠ°ΡΡΠΈΠ² ΡΡΡΠΎΠΊ arr. Π‘ΡΡΠΎΠΊΠ° s ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΠ΅ΠΉ ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ arr, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΉ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ. ΠΠ΅ΡΠ½ΠΈΡΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π΄Π»ΠΈΠ½Ρ s. ΠΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ - ΡΡΠΎ ΠΌΠ°ΡΡΠΈΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΏΡΡΠ΅ΠΌ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΠΈΠ»ΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΠΎΡΡΠ°Π²ΡΠΈΡ
ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ².
ΠΡΠΈΠΌΠ΅Ρ:
Input: arr = ["un","iq","ue"] Output: 4π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°: ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ arr ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΠΌΠΎΠΆΠ΅ΠΌ Π»ΠΈ ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅Π΅ ΠΊ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². ΠΡΠ»ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π΅Π΅ ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π²ΡΠ·ΠΎΠ² Π΄Π»Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠΈ. ΠΡΠ»ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ, ΠΏΡΠΎΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΠ΅ΠΊΡΡΡΡ ΡΡΡΠΎΠΊΡ ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ. 2β£ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²: ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ (set). ΠΡΠ»ΠΈ Π²ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΡΡΡΠΎΠΊΠΈ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½Ρ ΠΈ Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°ΡΡΡΡ Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΡΠΎΠΊΡ. 3β£ΠΠΎΠΈΡΠΊ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ: ΠΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°Π³Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ Π΄Π»ΠΈΠ½Ρ, Π΅ΡΠ»ΠΈ ΡΠ΅ΠΊΡΡΠ°Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π΄Π»ΠΈΠ½Π½Π΅Π΅ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
int maxLength(vector<string>& arr) {
return backtrack(arr, 0, "");
}
private:
bool isUnique(const string& s) {
unordered_set<char> char_set(s.begin(), s.end());
return char_set.size() == s.size();
}
int backtrack(const vector<string>& arr, int index, const string& current) {
if (!isUnique(current)) return 0;
int max_length = current.size();
for (int i = index; i < arr.size(); ++i) {
max_length = max(max_length, backtrack(arr, i + 1, current + arr[i]));
}
return max_length;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 89. Gray Code
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: medium
ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΡΠ΅Ρ Π΄Π»ΠΈΠ½Ρ n β ΡΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ 2^n ΡΠΈΡΠ΅Π» ΠΎΡ 0 Π΄ΠΎ 2^n - 1,
Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΡΠΈΡΠ»ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΡΠΎΠ²Π½ΠΎ Π½Π° ΠΎΠ΄ΠΈΠ½ Π±ΠΈΡ,
ΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎ ΡΠΈΡΠ»ΠΎ Π½Π΅ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΡΡΡ.
ΠΡΠΈΠΌΠ΅Ρ:
Input: n = 2 Output: [0,1,3,2] ΠΠΎΡΡΠ½Π΅Π½ΠΈΠ΅: Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ Π²ΠΈΠ΄: [00, 01, 11, 10]π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£ΠΠ°ΡΠΈΠ½Π°Π΅ΠΌ Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ 0 Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ β Π²ΡΠ΅ ΠΊΠΎΠ΄Ρ ΠΡΠ΅Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ Π½ΡΠ»Ρ. 2β£ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ DFS Ρ backtracking: ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅ΠΌ ΡΠΈΡΠ»Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π½Π° ΠΎΠ΄ΠΈΠ½ Π±ΠΈΡ (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ current ^ (1 << i)). 3β£Π₯ΡΠ°Π½ΠΈΠΌ ΡΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠΈΡΠ»Π° Π² unordered_set, ΡΡΠΎΠ±Ρ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ Π΄Π»ΠΈΠ½Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π΄ΠΎΡΡΠΈΠ³Π»Π° 2^n, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ true. ΠΠ½Π°ΡΠ΅ ΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ΅Π΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΡΠΈΡΠ»ΠΎ. ΠΡΠ»ΠΈ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎ β ΠΎΡΠΊΠ°ΡΡΠ²Π°Π΅ΠΌΡΡ Π½Π°Π·Π°Π΄. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
vector<int> grayCode(int n) {
vector<int> result;
result.push_back(0);
unordered_set<int> isPresent;
isPresent.insert(0);
grayCodeHelper(result, n, isPresent);
return result;
}
private:
bool grayCodeHelper(vector<int> &result, int n,
unordered_set<int> &isPresent) {
if (result.size() == (1 << n)) return true;
int current = result.back();
for (int i = 0; i < n; i++) {
int next = current ^ (1 << i);
if (isPresent.find(next) == isPresent.end()) {
result.push_back(next);
isPresent.insert(next);
if (grayCodeHelper(result, n, isPresent)) return true;
isPresent.erase(next);
result.pop_back();
}
}
return false;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 775. Global and Local Inversions
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: medium
ΠΠ°Π½ ΠΌΠ°ΡΡΠΈΠ² ΡΠ΅Π»ΡΡ
ΡΠΈΡΠ΅Π» nums Π΄Π»ΠΈΠ½ΠΎΠΉ n, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΡ Π²ΡΠ΅Ρ
ΡΠΈΡΠ΅Π» Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [0, n - 1].
Π§ΠΈΡΠ»ΠΎ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ
ΠΈΠ½Π²Π΅ΡΡΠΈΠΉ β ΡΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΠΏΠ°Ρ (i, j), Π³Π΄Π΅:
0 <= i < j < n
nums[i] > nums[j]
Π§ΠΈΡΠ»ΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ
ΠΈΠ½Π²Π΅ΡΡΠΈΠΉ β ΡΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² i, Π³Π΄Π΅:
0 <= i < n - 1
nums[i] > nums[i + 1]
ΠΠ΅ΡΠ½ΠΈΡΠ΅ true, Π΅ΡΠ»ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ
ΠΈΠ½Π²Π΅ΡΡΠΈΠΉ ΡΠ°Π²Π½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ
ΠΈΠ½Π²Π΅ΡΡΠΈΠΉ.
ΠΡΠΈΠΌΠ΅Ρ:
Input: nums = [1,0,2]
Output: true
Explanation: There is 1 global inversion and 1 local inversion.
π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ:
1β£ΠΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΠΈΠ½Π²Π΅ΡΡΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΈΠ½Π²Π΅ΡΡΠΈΠ΅ΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, Π΅ΡΡΡ Π»ΠΈ Π² Π½Π°ΡΠ΅ΠΉ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π½Π΅Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΈΠ½Π²Π΅ΡΡΠΈΠΈ (A[i] > A[j], i < j) Ρ j - i > 1.
2β£ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π±ΡΠ°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ i ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, Π΅ΡΡΡ Π»ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ j, ΡΠ°ΠΊΠΎΠΉ ΡΡΠΎ j > i + 1 ΠΈ nums[i] > nums[j]. ΠΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ Π½Π°ΠΉΠ΄Π΅Π½, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΠ·Π½Π°ΡΠ°ΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ Π½Π΅Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΈΠ½Π²Π΅ΡΡΠΈΠΈ.
3β£ΠΡΠ»ΠΈ Π΄Π»Ρ Π²ΡΠ΅Ρ
ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² i ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π²ΡΡΠ΅ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ, ΡΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ
ΠΈΠ½Π²Π΅ΡΡΠΈΠΉ ΡΠ°Π²Π½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ
ΠΈΠ½Π²Π΅ΡΡΠΈΠΉ, ΠΈ ΠΌΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ true. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Ρ
ΠΎΡΡ Π±Ρ ΠΎΠ΄Π½Π° Π½Π΅Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΠΈΠ½Π²Π΅ΡΡΠΈΡ Π½Π°ΠΉΠ΄Π΅Π½Π°, ΠΌΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ false.
π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
bool isIdealPermutation(vector<int>& A) {
int N = A.size();
for (int i = 0; i < N; ++i)
for (int j = i + 2; j < N; ++j)
if (A[i] > A[j]) return false;
return true;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 1283. Find the Smallest Divisor Given a Threshold
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: medium
ΠΠ°Π½ ΠΌΠ°ΡΡΠΈΠ² ΡΠ΅Π»ΡΡ
ΡΠΈΡΠ΅Π» nums ΠΈ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ threshold. ΠΡ Π²ΡΠ±Π΅ΡΠ΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ΅Π»ΡΠΉ Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ, ΡΠ°Π·Π΄Π΅Π»ΠΈΠΌ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π° Π½Π° Π½Π΅Π³ΠΎ ΠΈ ΡΡΠΌΠΌΠΈΡΡΠ΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π΄Π΅Π»Π΅Π½ΠΈΡ. ΠΠ°ΠΉΠ΄ΠΈΡΠ΅ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠΉ Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ, ΡΠ°ΠΊΠΎΠΉ ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠΉ Π²ΡΡΠ΅, ΠΌΠ΅Π½ΡΡΠ΅ ΠΈΠ»ΠΈ ΡΠ°Π²Π΅Π½ threshold.
ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΎΠΊΡΡΠ³Π»ΡΠ΅ΡΡΡ Π΄ΠΎ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅Π³ΠΎ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°. (ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ: 7/3 = 3 ΠΈ 10/2 = 5).
ΠΠ°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ, ΡΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ.
ΠΡΠΈΠΌΠ΅Ρ:
Input: nums = [1,2,5,9], threshold = 6 Output: 5 Explanation: We can get a sum to 17 (1+2+5+9) if the divisor is 1. If the divisor is 4 we can get a sum of 7 (1+1+2+3) and if the divisor is 5 the sum will be 5 (1+1+1+2).π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£ΠΠ°ΠΉΠ΄ΠΈΡΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° nums ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡΠ΅ Π΅Π³ΠΎ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ maxElement. 2β£ΠΡΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎ Π²ΡΠ΅ΠΌ Π΄Π΅Π»ΠΈΡΠ΅Π»ΡΠΌ ΠΎΡ 1 Π΄ΠΎ maxElement: ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠΉΡΠ΅ Π΄Π²Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅: sumOfDivisionResults Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΡΠΌΠΌΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈ thresholdExceeded Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ, ΠΏΡΠ΅Π²ΡΡΠ΅Π½ Π»ΠΈ ΠΏΠΎΡΠΎΠ³. ΠΡΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΠΌΠ°ΡΡΠΈΠ²Π° nums: Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π΄Π΅Π»Π΅Π½ΠΈΡ, ΠΎΠΊΡΡΠ³Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π΄ΠΎ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅Π³ΠΎ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°, Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ sumOfDivisionResults. ΠΡΠ»ΠΈ ΡΡΠΌΠΌΠ° ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ threshold, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ thresholdExceeded Π² true ΠΈ ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡΠ΅ ΠΈΡΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎ ΠΌΠ°ΡΡΠΈΠ²Ρ nums. 3β£ΠΡΠΎΠ²Π΅ΡΡΡΠ΅, Π±ΡΠ» Π»ΠΈ ΠΏΡΠ΅Π²ΡΡΠ΅Π½ ΠΏΠΎΡΠΎΠ³: ΠΡΠ»ΠΈ ΠΏΠΎΡΠΎΠ³ Π½Π΅ Π±ΡΠ» ΠΏΡΠ΅Π²ΡΡΠ΅Π½, ΡΠ΅ΠΊΡΡΠΈΠΉ Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠΌ Π΄Π΅Π»ΠΈΡΠ΅Π»Π΅ΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ Π²Π΅ΡΠ½ΠΈΡΠ΅ Π΅Π³ΠΎ. ΠΡΠ»ΠΈ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ, Π²Π΅ΡΠ½ΠΈΡΠ΅ -1. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
int smallestDivisor(vector<int>& nums, int threshold) {
int maxElement = *max_element(nums.begin(), nums.end());
for (int divisor = 1; divisor <= maxElement; ++divisor) {
int sumOfDivisionResults = 0;
bool thresholdExceeded = true;
for (int num : nums) {
sumOfDivisionResults += (num + divisor - 1) / divisor;
if (sumOfDivisionResults > threshold) {
thresholdExceeded = false;
break;
}
}
if (thresholdExceeded) {
return divisor;
}
}
return -1;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 1353. Maximum Number of Events That Can Be Attended
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: medium
ΠΠ°Π½ ΠΌΠ°ΡΡΠΈΠ² ΡΠΎΠ±ΡΡΠΈΠΉ, Π³Π΄Π΅ events[i] = [startDayi, endDayi]. ΠΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ i Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π² startDayi ΠΈ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ Π² endDayi.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΠ΅ΡΠΈΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅ i Π² Π»ΡΠ±ΠΎΠΉ Π΄Π΅Π½Ρ d, Π³Π΄Π΅ startDayi <= d <= endDayi. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΠ΅ΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ d.
ΠΠ΅ΡΠ½ΠΈΡΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΠ±ΡΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΠ΅ΡΠΈΡΡ.
ΠΡΠΈΠΌΠ΅Ρ:
Input: events= [[1,2],[2,3],[3,4],[1,2]] Output: 4π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΡΠΎΠ±ΡΡΠΈΠΉ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ: Π‘Π½Π°ΡΠ°Π»Π° ΠΎΡΡΠΎΡΡΠΈΡΡΠΉΡΠ΅ ΠΌΠ°ΡΡΠΈΠ² ΡΠΎΠ±ΡΡΠΈΠΉ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΡ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΡΠ½Π°ΡΠ°Π»Π° ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΡΡ ΡΠ°Π½ΡΡΠ΅. 2β£ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΠ΅ΡΠ΅Π½Π½ΡΡ Π΄Π½Π΅ΠΉ: Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π½Π΅ΠΉ, Π² ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΆΠ΅ Π±ΡΠ»ΠΈ ΠΏΠΎΡΠ΅ΡΠ΅Π½Ρ ΡΠΎΠ±ΡΡΠΈΡ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π»Π΅Π³ΠΊΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ, Π±ΡΠ» Π»ΠΈ Π΄Π΅Π½Ρ ΡΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π΄Π»Ρ ΠΏΠΎΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ. 3β£ΠΠΎΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠΈΠΉ Π² Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ Π΄Π½ΠΈ: ΠΡΠΎΠΉΠ΄ΠΈΡΠ΅ΡΡ ΠΏΠΎ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌΡ ΠΌΠ°ΡΡΠΈΠ²Ρ ΡΠΎΠ±ΡΡΠΈΠΉ. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π΄Π΅Π½Ρ ΠΎΡ Π½Π°ΡΠ°Π»Π° ΡΠΎΠ±ΡΡΠΈΡ Π΄ΠΎ Π΅Π³ΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΠΈ Π½Π°ΠΉΠ΄ΠΈΡΠ΅ ΠΏΠ΅ΡΠ²ΡΠΉ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ Π΄Π΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π΅ΡΠ΅ Π½Π΅ Π±ΡΠ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½. ΠΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠΉ Π΄Π΅Π½Ρ Π½Π°ΠΉΠ΄Π΅Π½, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π΅Π³ΠΎ Π² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΈ ΡΠ²Π΅Π»ΠΈΡΡΡΠ΅ ΡΡΠ΅ΡΡΠΈΠΊ ΠΏΠΎΡΠ΅ΡΠ΅Π½Π½ΡΡ ΡΠΎΠ±ΡΡΠΈΠΉ. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
int maxEvents(vector<vector<int>>& events) {
sort(events.begin(), events.end(), [](const vector<int>& a, const vector<int>& b) {
return a[1] < b[1];
});
set<int> visitedDays;
int count = 0;
for (const auto& event : events) {
for (int day = event[0]; day <= event[1]; day++) {
if (visitedDays.find(day) == visitedDays.end()) {
visitedDays.insert(day);
count++;
break;
}
}
}
return count;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 721. Accounts Merge
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: medium
ΠΠ°Π½ ΡΠΏΠΈΡΠΎΠΊ Π°ΠΊΠΊΠ°ΡΠ½ΡΠΎΠ², Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ accounts[i] - ΡΡΠΎ ΡΠΏΠΈΡΠΎΠΊ ΡΡΡΠΎΠΊ, Π³Π΄Π΅ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ accounts[i][0] - ΡΡΠΎ ΠΈΠΌΡ, Π° ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ - ΡΡΠΎ email, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΡ ΠΏΠΎΡΡΡ Π°ΠΊΠΊΠ°ΡΠ½ΡΠ°. Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΡΡΠΈ Π°ΠΊΠΊΠ°ΡΠ½ΡΡ. ΠΠ²Π° Π°ΠΊΠΊΠ°ΡΠ½ΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΡ, Π΅ΡΠ»ΠΈ Ρ ΠΎΠ±ΠΎΠΈΡ
Π°ΠΊΠΊΠ°ΡΠ½ΡΠΎΠ² Π΅ΡΡΡ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΎΠ±ΡΠΈΠΉ email. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π΄Π²Π° Π°ΠΊΠΊΠ°ΡΠ½ΡΠ° ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΠΈΠΌΡ, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΡ ΡΠ°Π·Π½ΡΠΌ Π»ΡΠ΄ΡΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ Π»ΡΠ΄Π΅ΠΉ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΠΈΠΌΠ΅Π½Π°. ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Ρ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΡΠ±ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ΅ΡΠΎΠ², Π½ΠΎ Π²ΡΠ΅ Π΅Π³ΠΎ ΡΡΠ΅ΡΠ° ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΠΈΠΌΡ. ΠΠΎΡΠ»Π΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΡΡΠ΅ΡΠΎΠ² Π²Π΅ΡΠ½ΠΈΡΠ΅ ΡΡΠ΅ΡΠ° Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅: ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠ΅ΡΠ° - ΠΈΠΌΡ, Π° ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ - ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΠ΅ ΠΏΠΈΡΡΠΌΠ° Π² ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. Π‘Π°ΠΌΠΈ Π°ΠΊΠΊΠ°ΡΠ½ΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Ρ Π² Π»ΡΠ±ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅.
ΠΡΠΈΠΌΠ΅Ρ:
nput: accounts = [["John","johnsmith@mail.com","john_newyork@mail.com"],["John","johnsmith@mail.com","john00@mail.com"],["Mary","mary@mail.com"],["John","johnnybravo@mail.com"]] Output: [["John","john00@mail.com","john_newyork@mail.com","johnsmith@mail.com"],["Mary","mary@mail.com"],["John","johnnybravo@mail.com"]]π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π³ΡΠ°Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ·Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ email-Π°Π΄ΡΠ΅ΡΠ°, Π° ΡΠ΅Π±ΡΠ° ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡΡ email-Π°Π΄ΡΠ΅ΡΠ°, ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΌΡ Π°ΠΊΠΊΠ°ΡΠ½ΡΡ. 2β£ΠΡΠΎΠΉΠ΄ΠΈΡΠ΅ ΠΏΠΎ Π³ΡΠ°ΡΡ, ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ Π²ΡΠ΅ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΠ΅ Π°ΠΊΠΊΠ°ΡΠ½ΡΡ. 3β£ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΡΠΎΠ±Π΅ΡΠΈΡΠ΅ email-Π°Π΄ΡΠ΅ΡΠ°, ΠΎΡΡΠΎΡΡΠΈΡΡΠΉΡΠ΅ ΠΈΡ ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² Π½Π°ΡΠ°Π»ΠΎ ΡΠΏΠΈΡΠΊΠ°. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
#include <iostream>
#include <vector>
#include <unordered_map>
#include <unordered_set>
#include <stack>
#include <algorithm>
using namespace std;
vector<vector<string>> accountsMerge(vector<vector<string>>& accounts) {
unordered_map<string, string> emailToName;
unordered_map<string, unordered_set<string>> graph;
for (auto& account : accounts) {
string name = account[0];
string firstEmail = account[1];
for (int i = 1; i < account.size(); ++i) {
string email = account[i];
graph[firstEmail].insert(email);
graph[email].insert(firstEmail);
emailToName[email] = name;
}
}
unordered_set<string> seen;
vector<vector<string>> mergedAccounts;
for (auto& [email, _] : emailToName) {
if (seen.count(email) == 0) {
vector<string> emails;
stack<string> stk;
stk.push(email);
while (!stk.empty()) {
string node = stk.top();
stk.pop();
if (seen.count(node) == 0) {
seen.insert(node);
emails.push_back(node);
for (auto& neighbor : graph[node]) {
if (!seen.count(neighbor)) {
stk.push(neighbor);
}
}
}
}
sort(emails.begin(), emails.end());
vector<string> account;
account.push_back(emailToName[email]);
account.insert(account.end(), emails.begin(), emails.end());
mergedAccounts.push_back(account);
}
}
return mergedAccounts;
}
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 958. Check Completeness of a Binary Tree
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: medium
ΠΠ°Π½ ΠΊΠΎΡΠ΅Π½Ρ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π°, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΠΎΠ½ΠΎ ΠΏΠΎΠ»Π½ΡΠΌ Π±ΠΈΠ½Π°ΡΠ½ΡΠΌ Π΄Π΅ΡΠ΅Π²ΠΎΠΌ.
Π ΠΏΠΎΠ»Π½ΠΎΠΌ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΌ Π΄Π΅ΡΠ΅Π²Π΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ, ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½, ΠΈ Π²ΡΠ΅ ΡΠ·Π»Ρ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΡΡΠΎΠ²Π½Π΅ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Ρ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π²Π΅Π΅. ΠΠ° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΡΡΠΎΠ²Π½Π΅ h ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡ 1 Π΄ΠΎ 2^h ΡΠ·Π»ΠΎΠ² Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ.
ΠΡΠΈΠΌΠ΅Ρ:
Input: root = [1,2,3,4,5,6]
Output: true
Explanation: Every level before the last is full (ie. levels with node-values {1} and {2, 3}), and all nodes in the last level ({4, 5, 6}) are as far left as possible.
π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ:
1β£ΠΡΠ»ΠΈ ΠΊΠΎΡΠ΅Π½Ρ Π΄Π΅ΡΠ΅Π²Π° ΡΠ°Π²Π΅Π½ null, Π²Π΅ΡΠ½ΠΈΡΠ΅ true.
2β£ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ nullNodeFound ΠΊΠ°ΠΊ false Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΡΠΎΠ³ΠΎ, Π²ΡΡΡΠ΅ΡΠ°Π»ΡΡ Π»ΠΈ ΡΠΆΠ΅ null-ΡΠ·Π΅Π». Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ Π² Π½Π΅Ρ ΠΊΠΎΡΠ΅Π½Ρ Π΄Π΅ΡΠ΅Π²Π°.
3β£ΠΠΎΠΊΠ° ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π½Π΅ ΠΏΡΡΡΠ°:
ΠΠ·Π²Π»Π΅ΠΊΠΈΡΠ΅ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ.
ΠΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠ°Π²Π΅Π½ null, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ nullNodeFound Π² true.
ΠΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π΅ ΡΠ°Π²Π΅Π½ null, ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅, Π²ΡΡΡΠ΅ΡΠ°Π»ΡΡ Π»ΠΈ ΡΠΆΠ΅ null-ΡΠ·Π΅Π». ΠΡΠ»ΠΈ nullNodeFound ΡΠ°Π²Π΅Π½ true, Π²Π΅ΡΠ½ΠΈΡΠ΅ false. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΈ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ² ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ·Π»Π°.
π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
bool isCompleteTree(TreeNode* root) {
if (!root) return true;
queue<TreeNode*> q;
q.push(root);
bool nullNodeFound = false;
while (!q.empty()) {
TreeNode* node = q.front();
q.pop();
if (!node) {
nullNodeFound = true;
} else {
if (nullNodeFound) {
return false;
}
q.push(node->left);
q.push(node->right);
}
}
return true;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 587. Erect the Fence
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: hard
ΠΠ°ΠΌ Π΄Π°Π½ ΠΌΠ°ΡΡΠΈΠ² trees, Π³Π΄Π΅ trees[i] = [xi, yi] ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π΅ΡΠ΅Π²Π° Π² ΡΠ°Π΄Ρ.
ΠΠ³ΡΠ°Π΄ΠΈΡΠ΅ Π²Π΅ΡΡ ΡΠ°Π΄ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ Π²Π΅ΡΠ΅Π²ΠΊΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ Π΄ΠΎΡΠΎΠ³ΠΎ. Π‘Π°Π΄ Ρ
ΠΎΡΠΎΡΠΎ ΠΎΠ³ΠΎΡΠΎΠΆΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π²ΡΠ΅ Π΄Π΅ΡΠ΅Π²ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½Ρ.
ΠΠ΅ΡΠ½ΠΈΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π΄Π΅ΡΠ΅Π²ΡΠ΅Π², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ ΡΠΎΡΠ½ΠΎ Π½Π° ΠΏΠ΅ΡΠΈΠΌΠ΅ΡΡΠ΅ ΠΎΠ³ΡΠ°Π΄Ρ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π΅ΡΠ½ΡΡΡ ΠΎΡΠ²Π΅Ρ Π² Π»ΡΠ±ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅.
ΠΡΠΈΠΌΠ΅Ρ:
Input: trees = [[1,1],[2,2],[2,0],[2,4],[3,3],[4,2]] Output: [[1,1],[2,0],[4,2],[3,3],[2,4]] Explanation: All the trees will be on the perimeter of the fence except the tree at [2, 2], which will be inside the fence.π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£ Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΡΠΎΡΠ΅ΠΊ ΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ Π½ΠΈΠΆΠ½Π΅ΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ: ΠΡΡΠΎΡΡΠΈΡΡΠΉΡΠ΅ ΡΠΎΡΠΊΠΈ ΠΏΠΎ ΠΈΡ x-ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌ, Π° Π² ΡΠ»ΡΡΠ°Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ x-ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ, ΠΏΠΎ y-ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌ. ΠΠΎΡΡΡΠΎΠΉΡΠ΅ Π½ΠΈΠΆΠ½ΡΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ, Π΄ΠΎΠ±Π°Π²Π»ΡΡ ΡΠΎΡΠΊΠΈ ΠΊ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ΅ ΠΈ ΡΠ΄Π°Π»ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΡΠΎΡΠΊΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΠΎΠ±ΡΠ°Π·ΡΡΡ ΠΏΡΠΎΡΠΈΠ² ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠΈ ΠΏΠΎΠ²ΠΎΡΠΎΡ. 2β£ ΠΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ Π²Π΅ΡΡ Π½Π΅ΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ: ΠΡΠΎΠΉΠ΄ΠΈΡΠ΅ΡΡ ΠΏΠΎ ΡΠΎΡΠΊΠ°ΠΌ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΡΡΠΎΠΈΡΡ Π²Π΅ΡΡ Π½ΡΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ. ΠΠΎΠ±Π°Π²Π»ΡΠΉΡΠ΅ ΡΠΎΡΠΊΠΈ ΠΊ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ΅ ΠΈ ΡΠ΄Π°Π»ΡΠΉΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΡΠΎΡΠΊΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΠΎΠ±ΡΠ°Π·ΡΡΡ ΠΏΡΠΎΡΠΈΠ² ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠΈ ΠΏΠΎΠ²ΠΎΡΠΎΡ. 3β£ Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄ΡΠ±Π»ΠΈΡΡΡΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈ Π²ΠΎΠ·Π²ΡΠ°Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°: ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ HashSet, ΡΡΠΎΠ±Ρ ΡΠ΄Π°Π»ΠΈΡΡ Π΄ΡΠ±Π»ΠΈΡΡΡΡΠΈΠ΅ΡΡ ΡΠΎΡΠΊΠΈ ΠΈΠ· ΡΡΠ΅ΠΊΠ°. ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠΉΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² ΠΌΠ°ΡΡΠΈΠ² ΠΈ Π²Π΅ΡΠ½ΠΈΡΠ΅ Π΅Π³ΠΎ. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
int orientation(vector<int>& p, vector<int>& q, vector<int>& r) {
return (q[1] - p[1]) * (r[0] - q[0]) - (q[0] - p[0]) * (r[1] - q[1]);
}
vector<vector<int>> outerTrees(vector<vector<int>>& points) {
sort(points.begin(), points.end(), [](vector<int>& p, vector<int>& q) {
return p[0] == q[0] ? p[1] < q[1] : p[0] < q[0];
});
vector<vector<int>> hull;
for (auto& point : points) {
while (hull.size() >= 2 && orientation(hull[hull.size() - 2], hull.back(), point) > 0)
hull.pop_back();
hull.push_back(point);
}
hull.pop_back();
for (int i = points.size() - 1; i >= 0; --i) {
while (hull.size() >= 2 && orientation(hull[hull.size() - 2], hull.back(), points[i]) > 0)
hull.pop_back();
hull.push_back(points[i]);
}
set<vector<int>> s(hull.begin(), hull.end());
return vector<vector<int>>(s.begin(), s.end());
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 364. Nested List Weight Sum II
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: medium
ΠΠ°ΠΌ Π΄Π°Π½ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅Π»ΡΡ
ΡΠΈΡΠ΅Π» nestedList. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈΠ±ΠΎ ΡΠ΅Π»ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ, Π»ΠΈΠ±ΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ, ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ΅Π»ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠΏΠΈΡΠΊΠ°ΠΌΠΈ.
ΠΠ»ΡΠ±ΠΈΠ½Π° ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° β ΡΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΏΠΈΡΠΊΠΎΠ², Π²Π½ΡΡΡΠΈ ΠΊΠΎΡΠΎΡΡΡ
ΠΎΠ½ΠΎ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ [1,[2,2],[[3],2],1] ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ ΡΠ°Π²Π½ΡΠΌ Π΅Π³ΠΎ Π³Π»ΡΠ±ΠΈΠ½Π΅. ΠΡΡΡΡ maxDepth Π±ΡΠ΄Π΅Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π³Π»ΡΠ±ΠΈΠ½ΠΎΠΉ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°.
ΠΠ΅Ρ ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ maxDepth - (Π³Π»ΡΠ±ΠΈΠ½Π° ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°) + 1.
ΠΠ΅ΡΠ½ΠΈΡΠ΅ ΡΡΠΌΠΌΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° Π² nestedList, ΡΠΌΠ½ΠΎΠΆΠ΅Π½Π½ΡΡ Π½Π° Π΅Π³ΠΎ Π²Π΅Ρ.
ΠΡΠΈΠΌΠ΅Ρ:
Input: nestedList = [[1,1],2,[1,1]] Output: 8 Explanation: Four 1's with a weight of 1, one 2 with a weight of 2. 1*1 + 1*1 + 2*2 + 1*1 + 1*1 = 8π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ BFS-Π΄Π΅ΡΠ΅Π²Π°, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈΠ· Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ nestedList Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ. 2β£ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ. ΠΡΠ»ΠΈ ΡΡΠΎ ΡΠΏΠΈΡΠΎΠΊ, ΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ sumOfElements, maxDepth ΠΈ sumOfProducts. 3β£ΠΠΎΠ³Π΄Π° ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΡΠ°Π½Π΅Ρ ΠΏΡΡΡΠΎΠΉ, Π²Π΅ΡΠ½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (maxDepth + 1) * sumOfElements - sumOfProducts. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
#include <vector>
#include <queue>
using namespace std;
class NestedInteger {
public:
bool isInteger() const;
int getInteger() const;
const vector<NestedInteger> &getList() const;
};
class Solution {
public:
int depthSumInverse(vector<NestedInteger>& nestedList) {
queue<NestedInteger> q;
for (auto& ni : nestedList) q.push(ni);
int depth = 1, maxDepth = 0, sumOfElements = 0, sumOfProducts = 0;
while (!q.empty()) {
int size = q.size();
maxDepth = max(maxDepth, depth);
for (int i = 0; i < size; ++i) {
NestedInteger nested = q.front();
q.pop();
if (nested.isInteger()) {
int value = nested.getInteger();
sumOfElements += value;
sumOfProducts += value * depth;
} else {
for (auto& ni : nested.getList()) q.push(ni);
}
}
depth++;
}
return (maxDepth + 1) * sumOfElements - sumOfProducts;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 1260. Shift 2D Grid
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: easy
ΠΠ°Π½Π° Π΄Π²ΡΠΌΠ΅ΡΠ½Π°Ρ ΡΠ΅ΡΠΊΠ° ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ m x n ΠΈ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ k. Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ΄Π²ΠΈΠ½ΡΡΡ ΡΠ΅ΡΠΊΡ k ΡΠ°Π·. ΠΠ° ΠΎΠ΄Π½Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠ΄Π²ΠΈΠ³Π°: ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² grid[i][j] ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² grid[i][j + 1]. ΠΠ»Π΅ΠΌΠ΅Π½Ρ Π² grid[i][n - 1] ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² grid[i + 1][0]. ΠΠ»Π΅ΠΌΠ΅Π½Ρ Π² grid[m - 1][n - 1] ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² grid[0][0]. ΠΠ΅ΡΠ½ΠΈΡΠ΅ Π΄Π²ΡΠΌΠ΅ΡΠ½ΡΡ ΡΠ΅ΡΠΊΡ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ΄Π²ΠΈΠ³Π° k ΡΠ°Π·.
ΠΡΠΈΠΌΠ΅Ρ:
Input: grid = [[1,2,3],[4,5,6],[7,8,9]], k = 1 Output: [[9,1,2],[3,4,5],[6,7,8]]π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π΄Π²ΡΠΌΠ΅ΡΠ½ΡΡ ΡΠ΅ΡΠΊΡ Π² ΠΎΠ΄Π½ΠΎΠΌΠ΅ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ². 2β£ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ΄Π²ΠΈΠ³ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌΠ΅ΡΠ½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅. 3β£ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½ΠΎΠΌΠ΅ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² Π΄Π²ΡΠΌΠ΅ΡΠ½ΡΡ ΡΠ΅ΡΠΊΡ. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
vector<vector<int>> shiftGrid(vector<vector<int>>& grid, int k) {
int m = grid.size(), n = grid[0].size();
int total = m * n;
k = k % total;
if (k == 0) {
return grid;
}
vector<int> flatArray(total);
for (int i = 0; i < total; ++i) {
flatArray[i] = grid[i / n][i % n];
}
vector<int> newArray(total);
for (int i = 0; i < total; ++i) {
newArray[(i + k) % total] = flatArray[i];
}
vector<vector<int>> newGrid(m, vector<int>(n));
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
newGrid[i][j] = newArray[i * n + j];
}
}
return newGrid;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 473. Matchsticks to Square
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: medium
ΠΠ°Π½ΠΎ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² ΡΠΏΠΈΡΠ΅ΠΊ, Π³Π΄Π΅ matchsticks[i] β ΡΡΠΎ Π΄Π»ΠΈΠ½Π° i-ΠΉ ΡΠΏΠΈΡΠΊΠΈ. ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΡΠΏΠΈΡΠΊΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ°. ΠΠ΅Π»ΡΠ·Ρ Π»ΠΎΠΌΠ°ΡΡ Π½ΠΈΠΊΠ°ΠΊΡΡ ΡΠΏΠΈΡΠΊΡ, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡΡ ΠΈΡ
, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΠΏΠΈΡΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° ΡΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·.
ΠΠ΅ΡΠ½ΡΡΡ true, Π΅ΡΠ»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡΡΠ°Π²ΠΈΡΡ ΠΊΠ²Π°Π΄ΡΠ°Ρ, ΠΈ false Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅.
ΠΡΠΈΠΌΠ΅Ρ:
Input: matchsticks = [1,1,2,2,2] Output: true Explanation: You can form a square with length 2, one side of the square came two sticks with length 1.π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠΎΠΉ ΡΠΏΠΈΡΠΊΠΈ ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠΎΡΠΎΠ½ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΆΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½Ρ. ΠΠ°Π·ΠΎΠ²ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ Π΄Π»Ρ ΡΠ΅ΠΊΡΡΡΠΈΠΈ: Π΅ΡΠ»ΠΈ Π²ΡΠ΅ ΡΠΏΠΈΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ ΠΈ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΎ 4 ΡΡΠΎΡΠΎΠ½Ρ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ True. 2β£ΠΠ»Ρ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠΏΠΈΡΠΊΠΈ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌ 4 Π²Π°ΡΠΈΠ°Π½ΡΠ°: ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°ΡΡΡΡ Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΡΡΠΎΡΠΎΠ½ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ°. ΠΡΠΎΠ±ΡΠ΅ΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· 4 Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ², Π²ΡΠ·ΡΠ²Π°Ρ ΡΠ΅ΠΊΡΡΡΠΈΡ Π΄Π»Ρ Π½ΠΈΡ . 3β£ΠΡΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΈΠ· ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ True, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ True, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ False. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
#include <vector>
#include <algorithm>
class Solution {
public:
std::vector<int> nums;
std::vector<int> sums;
int possibleSquareSide;
Solution() : sums(4, 0) {}
bool dfs(int index) {
if (index == nums.size()) {
return sums[0] == sums[1] && sums[1] == sums[2] && sums[2] == sums[3];
}
int element = nums[index];
for (int i = 0; i < 4; ++i) {
if (sums[i] + element <= possibleSquareSide) {
sums[i] += element;
if (dfs(index + 1)) {
return true;
}
sums[i] -= element;
}
}
return false;
}
bool makesquare(std::vector<int>& nums) {
if (nums.empty()) {
return false;
}
int perimeter = std::accumulate(nums.begin(), nums.end(), 0);
possibleSquareSide = perimeter / 4;
if (possibleSquareSide * 4 != perimeter) {
return false;
}
std::sort(nums.rbegin(), nums.rend());
this->nums = nums;
return dfs(0);
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 903. Valid Permutations for DI Sequence
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: hard
ΠΠ°ΠΌ Π΄Π°Π½Π° ΡΡΡΠΎΠΊΠ° s Π΄Π»ΠΈΠ½Ρ n, Π³Π΄Π΅ s[i] Π»ΠΈΠ±ΠΎ: 'D' ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΠ±ΡΠ²Π°Π½ΠΈΠ΅, Π»ΠΈΠ±ΠΎ 'I' ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΠ΅. ΠΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° perm ΠΈΠ· n + 1 ΡΠ΅Π»ΡΡ
ΡΠΈΡΠ΅Π» Π²ΡΠ΅Ρ
ΡΠ΅Π»ΡΡ
ΡΠΈΡΠ΅Π» Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [0, n] Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠΉ, Π΅ΡΠ»ΠΈ Π΄Π»Ρ Π²ΡΠ΅Ρ
Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΡ
i: Π΅ΡΠ»ΠΈ s[i] == 'D', ΡΠΎ perm[i] > perm[i + 1], Π° Π΅ΡΠ»ΠΈ s[i] == 'I', ΡΠΎ perm[i] < perm[i + 1]. ΠΠ΅ΡΠ½ΠΈΡΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΡ
ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ perm. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΡΠ²Π΅Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π±ΠΎΠ»ΡΡΠΈΠΌ, Π²Π΅ΡΠ½ΠΈΡΠ΅ Π΅Π³ΠΎ ΠΏΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ 109 + 7.
ΠΡΠΈΠΌΠ΅Ρ:
Input: s = "DID" Output: 5π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£Π‘ΠΎΠ·Π΄Π°ΡΡ Π΄Π²ΡΠΌΠ΅ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² dp, Π³Π΄Π΅ dp[i][j] ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΡ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ Π΄Π»ΠΈΠ½Ρ i, ΠΎΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΠΈΡ ΡΡ Π½Π° j. 2β£ΠΠ°ΠΏΠΎΠ»Π½ΠΈΡΡ ΠΌΠ°ΡΡΠΈΠ² dp, ΡΡΠΈΡΡΠ²Π°Ρ ΡΡΠ»ΠΎΠ²ΠΈΡ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΡ ΠΈ ΡΠ±ΡΠ²Π°Π½ΠΈΡ ΠΈΠ· ΡΡΡΠΎΠΊΠΈ s. 3β£ΠΠ΅ΡΠ½ΡΡΡ ΡΡΠΌΠΌΡ dp[n][j] Π΄Π»Ρ Π²ΡΠ΅Ρ j, ΡΡΠΎ Π΄Π°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΡ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ Π΄Π»ΠΈΠ½Ρ n + 1. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
int numPermsDISequence(string s) {
const int MOD = 1e9 + 7;
int n = s.size();
vector<vector<int>> dp(n + 1, vector<int>(n + 1, 0));
dp[0][0] = 1;
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= i; j++) {
if (s[i - 1] == 'D') {
for (int k = j; k < i; k++) {
dp[i][j] = (dp[i][j] + dp[i - 1][k]) % MOD;
}
} else {
for (int k = 0; k < j; k++) {
dp[i][j] = (dp[i][j] + dp[i - 1][k]) % MOD;
}
}
}
}
int result = 0;
for (int j = 0; j <= n; j++) {
result = (result + dp[n][j]) % MOD;
}
return result;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 814. Binary Tree Pruning
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: medium
ΠΠ°Π½ ΠΊΠΎΡΠ΅Π½Ρ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π°. ΠΠ΅ΡΠ½ΠΈΡΠ΅ ΡΠΎ ΠΆΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ΄Π°Π»Π΅Π½Ρ Π²ΡΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΡΡ (Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π°), Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ 1.
ΠΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎ ΡΠ·Π»Π° node - ΡΡΠΎ ΡΠ°ΠΌ ΡΠ·Π΅Π» node ΠΈ Π²ΡΠ΅ ΡΠ·Π»Ρ, ΡΠ²Π»ΡΡΡΠΈΠ΅ΡΡ ΠΏΠΎΡΠΎΠΌΠΊΠ°ΠΌΠΈ node.
ΠΡΠΈΠΌΠ΅Ρ:
Input: root = [1,null,0,0,1] Output: [1,null,0,null,1] Explanation: Only the red nodes satisfy the property "every subtree not containing a 1". The diagram on the right represents the answer.π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ containsOne(node), ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ·Π»Π΅ Π΅Π΄ΠΈΠ½ΠΈΡΡ, ΠΈ ΠΎΠ±ΡΠ΅Π·Π°Π΅Ρ Π²ΡΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΡΡ, Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ Π΅Π΄ΠΈΠ½ΠΈΡΡ. 2β£ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎ node.left Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΅Π΄ΠΈΠ½ΠΈΡΡ, ΡΠΎ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±ΡΠ΅Π·Π°ΡΡ Π΅Π³ΠΎ ΡΠ΅ΡΠ΅Π· node.left = null. 3β£Π’Π°ΠΊΠΆΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΡΠ·Π΅Π». ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π΄Π΅ΡΠ΅Π²ΠΎ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ·Π»Π° 0, ΡΠΎ ΠΎΡΠ²Π΅ΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΠΏΡΡΡΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
TreeNode* pruneTree(TreeNode* root) {
return containsOne(root) ? root : nullptr;
}
private:
bool containsOne(TreeNode* node) {
if (!node) return false;
bool leftContainsOne = containsOne(node->left);
bool rightContainsOne = containsOne(node->right);
if (!leftContainsOne) node->left = nullptr;
if (!rightContainsOne) node->right = nullptr;
return node->val == 1 || leftContainsOne || rightContainsOne;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 404. Sum of Left Leaves
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: easy
ΠΡΠ»ΠΈ Π·Π°Π΄Π°Π½ ΠΊΠΎΡΠ΅Π½Ρ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π°, Π²Π΅ΡΠ½ΠΈΡΠ΅ ΡΡΠΌΠΌΡ Π²ΡΠ΅Ρ
Π»Π΅Π²ΡΡ
Π»ΠΈΡΡΡΠ΅Π². ΠΠΈΡΡ - ΡΡΠΎ ΡΠ·Π΅Π», Π½Π΅ ΠΈΠΌΠ΅ΡΡΠΈΠΉ Π΄Π΅ΡΠ΅ΠΉ. ΠΠ΅Π²ΡΠΉ Π»ΠΈΡΡ - ΡΡΠΎ Π»ΠΈΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π»Π΅Π²ΡΠΌ ΡΠ΅Π±Π΅Π½ΠΊΠΎΠΌ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠ·Π»Π°.
ΠΡΠΈΠΌΠ΅Ρ:
Input: root = [3,9,20,null,null,15,7] Output: 24π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ ΠΎΠ±Ρ ΠΎΠ΄ Π΄Π΅ΡΠ΅Π²Π° ΠΠ±Ρ ΠΎΠ΄ΠΈΡΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΠ·Π΅Π» ΠΈ ΡΠ»Π°Π³, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΡΠ·Π΅Π» Π»Π΅Π²ΡΠΌ ΡΠ΅Π±Π΅Π½ΠΊΠΎΠΌ. 2β£ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π»ΠΈΡΡΡΠ΅Π² ΠΡΠ»ΠΈ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΠ·Π΅Π» ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈΡΡΠΎΠΌ ΠΈ ΡΠ»Π°Π³ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΡΠΎ Π»Π΅Π²ΡΠΉ ΡΠ΅Π±Π΅Π½ΠΎΠΊ, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ·Π»Π° ΠΊ ΡΡΠΌΠΌΠ΅. 3β£Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π²ΡΠ·ΠΎΠ² Π΄Π»Ρ Π΄Π΅ΡΠ΅ΠΉ Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ Π²ΡΠ·ΠΎΠ²ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΈ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅ΠΉ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ·Π»Π°, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ»Π°Π³. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
int sumOfLeftLeaves(TreeNode* root) {
return dfs(root, false);
}
private:
int dfs(TreeNode* node, bool isLeft) {
if (!node) return 0;
if (!node->left && !node->right) return isLeft ? node->val : 0;
return dfs(node->left, true) + dfs(node->right, false);
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 336. Palindrome Pairs
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: hard
ΠΠ°ΠΌ Π΄Π°Π½ ΠΌΠ°ΡΡΠΈΠ² ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΡ
ΡΡΡΠΎΠΊ words, ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΡΠ΅ΠΌΡΠΉ Ρ 0.
ΠΠ°ΡΠ° ΠΏΠ°Π»ΠΈΠ½Π΄ΡΠΎΠΌΠΎΠ² β ΡΡΠΎ ΠΏΠ°ΡΠ° ΡΠ΅Π»ΡΡ
ΡΠΈΡΠ΅Π» (i, j), ΡΠ°ΠΊΠΈΡ
ΡΡΠΎ:
0 <= i, j < words.length,
i != j, ΠΈ
words[i] + words[j] (ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΡ Π΄Π²ΡΡ
ΡΡΡΠΎΠΊ) ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ°Π»ΠΈΠ½Π΄ΡΠΎΠΌΠΎΠΌ.
ΠΠ΅ΡΠ½ΠΈΡΠ΅ ΠΌΠ°ΡΡΠΈΠ² Π²ΡΠ΅Ρ
ΠΏΠ°Ρ ΠΏΠ°Π»ΠΈΠ½Π΄ΡΠΎΠΌΠΎΠ² ΠΈΠ· ΡΠ»ΠΎΠ².
ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΡ O(ΡΡΠΌΠΌΠ° Π΄Π»ΠΈΠ½ Π²ΡΠ΅Ρ
ΡΠ»ΠΎΠ² Π² words).
ΠΡΠΈΠΌΠ΅Ρ:
Input: words = ["abcd","dcba","lls","s","sssll"] Output: [[0,1],[1,0],[3,2],[2,4]] Explanation: The palindromes are ["abcddcba","dcbaabcd","slls","llssssll"]π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π΄Π°Π½Π½ΡΡ : Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² (ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ°Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ²). Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ»ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ»ΠΎΠ² ΠΈ ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ², ΡΡΠΎΠ±Ρ ΡΡΠΊΠΎΡΠΈΡΡ ΠΏΠΎΠΈΡΠΊ. 2β£ΠΡΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΠΏΠ°ΡΠ°ΠΌ ΡΠ»ΠΎΠ² ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°: ΠΡΠΎΠΉΠ΄ΠΈΡΠ΅ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΠΏΠ°ΡΠ°ΠΌ ΡΠ»ΠΎΠ² Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ words, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄Π²Π° Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΡΠΈΠΊΠ»Π°. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°ΡΡ ΡΠ»ΠΎΠ² ΠΏΡΠΎΠ²Π΅ΡΡΠΉΡΠ΅, ΠΎΠ±ΡΠ°Π·ΡΡΡ Π»ΠΈ ΠΎΠ½ΠΈ ΠΏΠ°Π»ΠΈΠ½Π΄ΡΠΎΠΌ ΠΏΡΠΈ ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΠΈ. ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΡΡΡΠΎΠΊ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, ΡΠ°Π²Π½Π° Π»ΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Π½Π°Ρ ΡΡΡΠΎΠΊΠ° ΡΠ²ΠΎΠ΅ΠΉ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ. 3β£ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΡ ΠΏΠ°Ρ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ: ΠΡΠ»ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΠ°Π»ΠΈΠ½Π΄ΡΠΎΠΌ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ΅ΠΊΡΡΡΡ ΠΏΠ°ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ² Π² ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ². ΠΠ΅ΡΠ½ΠΈΡΠ΅ ΠΈΡΠΎΠ³ΠΎΠ²ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΡ ΠΏΠ°Ρ. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
vector<vector<int>> palindromePairs(vector<string>& words) {
vector<vector<int>> pairs;
for (int i = 0; i < words.size(); ++i) {
for (int j = 0; j < words.size(); ++j) {
if (i == j) continue;
string combined = words[i] + words[j];
string reversed = string(combined.rbegin(), combined.rend());
if (combined == reversed) {
pairs.push_back({i, j});
}
}
}
return pairs;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 1057. Campus Bikes
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: medium
Π Π³ΠΎΡΠΎΠ΄ΠΊΠ΅, ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π½ΠΎΠΌ Π½Π° ΠΏΠ»ΠΎΡΠΊΠΎΡΡΠΈ X-Y, Π΅ΡΡΡ n ΡΠ°Π±ΠΎΡΠΈΡ
ΠΈ m Π²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄ΠΎΠ², ΠΏΡΠΈΡΠ΅ΠΌ n <= m. ΠΠ°ΠΌ Π΄Π°Π½ ΠΌΠ°ΡΡΠΈΠ² workers Π΄Π»ΠΈΠ½Ρ n, Π³Π΄Π΅ workers[i] = [xi, yi] - ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ i-Π³ΠΎ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ. ΠΠ°ΠΌ ΡΠ°ΠΊΠΆΠ΅ Π΄Π°Π½ ΠΌΠ°ΡΡΠΈΠ² bikes Π΄Π»ΠΈΠ½Ρ m, Π³Π΄Π΅ bikes[j] = [xj, yj] - ΠΏΠΎΠ·ΠΈΡΠΈΡ j-Π³ΠΎ Π²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄Π°. ΠΡΠ΅ Π·Π°Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½Ρ. ΠΠ°Π·Π½Π°ΡΠ°Π΅ΠΌ Π²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊΡ. Π‘ΡΠ΅Π΄ΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
Π²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄ΠΎΠ² ΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊΠΎΠ² ΠΌΡ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΠ°ΡΡ (workeri, bikej) Ρ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠΌ ΠΌΠ°Π½Ρ
ΡΡΡΠ΅Π½ΡΠΊΠΈΠΌ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ ΠΈ Π½Π°Π·Π½Π°ΡΠ°Π΅ΠΌ Π²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄ ΡΡΠΎΠΌΡ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊΡ. ΠΡΠ»ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠ°Ρ (workeri, bikej) Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠΌ ΠΌΠ°Π½Ρ
ΡΡΡΠ΅Π½ΡΠΊΠΈΠΌ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ, ΠΌΡ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΠ°ΡΡ Ρ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊΠ°. ΠΡΠ»ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ, ΠΌΡ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΠ°ΡΡ Ρ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ Π²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄Π°. ΠΠΎΠ²ΡΠΎΡΡΠ΅ΠΌ ΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ Π΄ΠΎ ΡΠ΅Ρ
ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΎΡΡΠ°Π½Π΅ΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΡ
ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊΠΎΠ². ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΠΌΠ°ΡΡΠΈΠ² answer Π΄Π»ΠΈΠ½Ρ n, Π³Π΄Π΅ answer[i] - ΠΈΠ½Π΄Π΅ΠΊΡ (Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ 0) Π²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄Π°, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Π·Π½Π°ΡΠ΅Π½ i-ΠΉ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊ. ΠΠ°Π½Ρ
ΡΡΡΠ΅Π½ΡΠΊΠΎΠ΅ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΡΠΎΡΠΊΠ°ΠΌΠΈ p1 ΠΈ p2 ΡΠ°Π²Π½ΠΎ Manhattan(p1, p2) = |p1.x - p2.x| + |p1.y - p2.y|.
ΠΡΠΈΠΌΠ΅Ρ:
Input: workers = [[0,0],[2,1]], bikes = [[1,2],[3,3]] Output: [1,0]π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°ΡΡ (ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊ, Π²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄) Π²ΡΡΠΈΡΠ»ΠΈ ΠΠ°Π½Ρ ΡΡΡΠ΅Π½ΡΠΊΠΎΠ΅ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈ Π²ΡΠ΅ ΠΏΠ°ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ Π² ΡΠΏΠΈΡΠΎΠΊ. 2β£ΠΡΡΠΎΡΡΠΈΡΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ°Ρ ΠΏΠΎ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊΠ° ΠΈ Π²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄Π°. ΠΠ°Π·Π½Π°ΡΡ Π²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄Ρ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊΠ°ΠΌ, ΡΠ»Π΅Π΄ΡΡ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌΡ ΡΠΏΠΈΡΠΊΡ ΠΏΠ°Ρ ΠΈ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ½ΠΈΠΊΠΈ ΠΈ Π²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄Ρ ΡΠΆΠ΅ Π±ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ. 3β£ΠΠ°ΠΏΠΎΠ»Π½ΠΈ ΠΈ Π²Π΅ΡΠ½ΠΈ ΠΌΠ°ΡΡΠΈΠ² Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
vector<int> assignBikes(vector<vector<int>>& workers, vector<vector<int>>& bikes) {
vector<tuple<int, int, int>> pairs;
for (int i = 0; i < workers.size(); i++) {
for (int j = 0; j < bikes.size(); j++) {
int distance = abs(workers[i][0] - bikes[j][0]) + abs(workers[i][1] - bikes[j][1]);
pairs.emplace_back(distance, i, j);
}
}
sort(pairs.begin(), pairs.end());
vector<int> result(workers.size(), -1);
vector<bool> bikeTaken(bikes.size(), false);
vector<bool> workerAssigned(workers.size(), false);
for (auto& [distance, workerIdx, bikeIdx] : pairs) {
if (!workerAssigned[workerIdx] && !bikeTaken[bikeIdx]) {
result[workerIdx] = bikeIdx;
bikeTaken[bikeIdx] = true;
workerAssigned[workerIdx] = true;
}
}
return result;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 208. Implement Trie (Prefix Tree)
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: medium
Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ
Trie (ΠΏΡΠ΅ΡΠΈΠΊΡΠ½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ), ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ:
insert(word) β Π²ΡΡΠ°Π²ΠΊΠ° ΡΠ»ΠΎΠ²Π°
search(word) β ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°, Π±ΡΠ»ΠΎ Π»ΠΈ ΡΠ»ΠΎΠ²ΠΎ Π²ΡΡΠ°Π²Π»Π΅Π½ΠΎ
startsWith(prefix) β ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°, Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π»ΠΈ Ρ
ΠΎΡΡ ΠΎΠ΄Π½ΠΎ Π²ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠ΅ΡΠΈΠΊΡΠ°
ΠΡΠΈΠΌΠ΅Ρ:
Input: ["Trie", "insert", "search", "search", "startsWith", "insert", "search"] [[], ["apple"], ["apple"], ["app"], ["app"], ["app"], ["app"]] Output: [null, null, true, false, true, null, true]π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ Π²ΡΡΠ°Π²ΠΊΠ°: ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ·Π΅Π» (TrieNode) ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ· 26 ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ (ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΡ Π±ΡΠΊΠ²Ρ Π°Π»ΡΠ°Π²ΠΈΡΠ°) ΠΈ ΡΠ»Π°Π³ isEnd. ΠΠ΅ΡΠΎΠ΄ insert ΡΠΎΠ·Π΄Π°Π΅Ρ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠΈΠ΅ ΡΠ·Π»Ρ ΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ isEnd = true Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° ΡΠ»ΠΎΠ²Π°. 2β£ΠΠΎΠΈΡΠΊ ΡΡΡΠΎΠΊΠΈ: ΠΠ΅ΡΠΎΠ΄ search ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ searchPrefix, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌ ΡΠ»ΠΎΠ²Π°. ΠΡΠ»ΠΈ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠΉ ΡΠ·Π΅Π» ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΈ ΠΎΡΠΌΠ΅ΡΠ΅Π½ ΠΊΠ°ΠΊ ΠΊΠΎΠ½Π΅Ρ ΡΠ»ΠΎΠ²Π°, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ true. 3β£ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΡΠ΅ΡΠΈΠΊΡΠ°: ΠΠ΅ΡΠΎΠ΄ startsWith ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ searchPrefix, ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ true, Π΅ΡΠ»ΠΈ ΡΠ΄Π°Π»ΠΎΡΡ Π΄ΠΎΠΉΡΠΈ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠ΅ΡΠΈΠΊΡΠ°. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
#include <vector>
#include <string>
class TrieNode {
private:
TrieNode* links[26];
bool isEnd;
public:
TrieNode() : isEnd(false) {
for (int i = 0; i < 26; ++i) {
links[i] = nullptr;
}
}
bool containsKey(char ch) {
return links[ch - 'a'] != nullptr;
}
TrieNode* get(char ch) {
return links[ch - 'a'];
}
void put(char ch, TrieNode* node) {
links[ch - 'a'] = node;
}
void setEnd() {
isEnd = true;
}
bool isEndNode() {
return isEnd;
}
};
class Trie {
private:
TrieNode* root;
TrieNode* searchPrefix(const std::string& word) {
TrieNode* node = root;
for (char ch : word) {
if (node->containsKey(ch)) {
node = node->get(ch);
} else {
return nullptr;
}
}
return node;
}
public:
Trie() {
root = new TrieNode();
}
void insert(const std::string& word) {
TrieNode* node = root;
for (char ch : word) {
if (!node->containsKey(ch)) {
node->put(ch, new TrieNode());
}
node = node->get(ch);
}
node->setEnd();
}
bool search(const std::string& word) {
TrieNode* node = searchPrefix(word);
return node != nullptr && node->isEndNode();
}
bool startsWith(const std::string& prefix) {
return searchPrefix(prefix) != nullptr;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ