C/C++ | LeetCode
Kanalga Telegramβda oβtish
Π‘Π°ΠΉΡ: https://easyoffer.ru/ ΠΡΠ΅ ΠΊΠ°Π½Π°Π»Ρ: t.me/+xGeAw6ckJ4liYzQy ΠΠΎΠ½ΡΠ°ΠΊΡ Π΄Π»Ρ ΡΠ΅ΠΊΠ»Π°ΠΌΡ: @easyoffer_adv
Ko'proq ko'rsatish3 239
Obunachilar
+124 soatlar
+77 kunlar
-430 kunlar
Postlar arxiv
3 239
ΠΠ°Π΄Π°ΡΠ°: 1365. How Many Numbers Are Smaller Than the Current Number
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: easy
ΠΠ°Π½ ΠΌΠ°ΡΡΠΈΠ² nums. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° nums[i] ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΠ΅Π» Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΌΠ΅Π½ΡΡΠ΅ Π΅Π³ΠΎ. Π’ΠΎ Π΅ΡΡΡ, Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ nums[i] Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΡΡΠΈΡΠ°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΡ
j, ΡΠ°ΠΊΠΈΡ
ΡΡΠΎ j != i ΠΈ nums[j] < nums[i].
ΠΠ΅ΡΠ½ΠΈΡΠ΅ ΠΎΡΠ²Π΅Ρ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°ΡΡΠΈΠ²Π°.
ΠΡΠΈΠΌΠ΅Ρ:
Input: nums = [6,5,4,8] Output: [2,1,0,3]π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΏΠΈΠΈ ΠΈ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΌΠ°ΡΡΠΈΠ²Π°: Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠΎΠΏΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° nums, ΡΡΠΎΠ±Ρ Π»Π΅Π³ΠΊΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΌΠ΅Π½ΡΡΠΈΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ. 2β£ΠΠΎΠΈΡΠΊ ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°: ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° nums[i] Π½Π°ΠΉΠ΄ΠΈΡΠ΅ Π΅Π³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡ Π² ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΡΠΎΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΌΠ΅Π½ΡΡΠΈΡ nums[i]. 3β£Π€ΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠ²Π΅ΡΠ°: Π‘ΡΠΎΡΠΌΠΈΡΡΠΉΡΠ΅ ΠΌΠ°ΡΡΠΈΠ² ΠΎΡΠ²Π΅ΡΠΎΠ², Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π±ΡΠ΄Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΡΠΈΡΠ΅Π», ΠΌΠ΅Π½ΡΡΠΈΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
#include <vector>
#include <algorithm>
class Solution {
public:
std::vector<int> smallerNumbersThanCurrent(std::vector<int>& nums) {
std::vector<int> sortedNums = nums;
std::sort(sortedNums.begin(), sortedNums.end());
std::vector<int> result;
for (int num : nums) {
result.push_back(std::find(sortedNums.begin(), sortedNums.end(), num) - sortedNums.begin());
}
return result;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 45. Jump Game II
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: medium
ΠΠ°Π½ ΠΌΠ°ΡΡΠΈΠ² nums, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ nums[i] ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ Π΄Π»ΠΈΠ½Ρ ΠΏΡΡΠΆΠΊΠ° ΠΈΠ· ΠΏΠΎΠ·ΠΈΡΠΈΠΈ i.
ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π²Π΅ΡΠ½ΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΡΠΆΠΊΠΎΠ², ΡΡΠΎΠ±Ρ Π΄ΠΎΡΡΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ°.
ΠΠ°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ, ΡΡΠΎ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
ΠΡΠΈΠΌΠ΅Ρ:
Input: nums = [2,3,0,1,4] Output: 2π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ: curEnd = 0 β Π³ΡΠ°Π½ΠΈΡΠ° ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΡΡΠΆΠΊΠ° curFar = 0 β ΡΠ°ΠΌΠ°Ρ Π΄Π°Π»ΡΠ½ΡΡ Π΄ΠΎΡΡΠΈΠΆΠΈΠΌΠ°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ answer = 0 β ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΡΠΆΠΊΠΎΠ² 2β£ΠΠ΅ΡΠ΅Π±ΡΠ°ΡΡ ΠΌΠ°ΡΡΠΈΠ² Π΄ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ°: ΠΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°Π³Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ curFar = max(curFar, i + nums[i]) 3β£ΠΠΎΠ³Π΄Π° ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ curEnd, ΡΠΎΠ²Π΅ΡΡΠ°Π΅ΡΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΡΡΠΆΠΎΠΊ: Π£Π²Π΅Π»ΠΈΡΠΈΡΡ answer++ ΠΠ±Π½ΠΎΠ²ΠΈΡΡ curEnd = curFar π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
int jump(vector<int>& nums) {
int answer = 0, n = int(nums.size());
int curEnd = 0, curFar = 0;
for (int i = 0; i < n - 1; ++i) {
curFar = max(curFar, i + nums[i]);
if (i == curEnd) {
answer++;
curEnd = curFar;
}
}
return answer;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 1039. Minimum Score Triangulation of Polygon
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: medium
Π£ Π²Π°Ρ Π΅ΡΡΡ Π²ΡΠΏΡΠΊΠ»ΡΠΉ n-ΡΡΠΎΡΠΎΠ½Π½ΠΈΠΉ ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ, ΠΊΠ°ΠΆΠ΄Π°Ρ Π²Π΅ΡΡΠΈΠ½Π° ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π΅Ρ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ°ΠΌ Π΄Π°Π½ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² values, Π³Π΄Π΅ values[i] - ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ i-ΠΉ Π²Π΅ΡΡΠΈΠ½Ρ (Ρ.Π΅. ΠΏΠΎ ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠ΅). ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΠΈΠ°Π½Π³ΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ Π½Π° n - 2 ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° ΡΠ°Π²Π½ΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π΅Π³ΠΎ Π²Π΅ΡΡΠΈΠ½, Π° ΠΎΠ±ΡΠΈΠΉ Π±Π°Π»Π» ΡΡΠΈΠ°Π½Π³ΡΠ»ΡΡΠΈΠΈ ΡΠ°Π²Π΅Π½ ΡΡΠΌΠΌΠ΅ ΡΡΠΈΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ Π²ΡΠ΅Ρ
n - 2 ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠ² Π² ΡΡΠΈΠ°Π½Π³ΡΠ»ΡΡΠΈΠΈ. ΠΠ΅ΡΠ½ΠΈΡΠ΅ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΉ ΠΎΠ±ΡΠΈΠΉ Π±Π°Π»Π», ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠΈΠ°Π½Π³ΡΠ»ΡΡΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°.
ΠΡΠΈΠΌΠ΅Ρ:
Input: values = [1,2,3] Output: 6π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ: Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π΄Π²ΡΠΌΠ΅ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² dp, Π³Π΄Π΅ dp[i][j] Π±ΡΠ΄Π΅Ρ Ρ ΡΠ°Π½ΠΈΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΉ ΠΎΠ±ΡΠΈΠΉ Π±Π°Π»Π» ΡΡΠΈΠ°Π½Π³ΡΠ»ΡΡΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°, ΡΠΎΡΡΠΎΡΡΠ΅Π³ΠΎ ΠΈΠ· Π²Π΅ΡΡΠΈΠ½ ΠΎΡ i Π΄ΠΎ j. 2β£ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ dp: ΠΡΠΎΡ ΠΎΠ΄ΠΈΠΌ ΠΏΠΎ Π²ΡΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ Π΄Π»ΠΈΠ½Π°ΠΌ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠ², Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠ² (Π΄Π»ΠΈΠ½Π° 3) Π΄ΠΎ Π²ΡΠ΅Π³ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° (Π΄Π»ΠΈΠ½Π° n). ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° Π½Π°Ρ ΠΎΠ΄ΠΈΠΌ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΉ ΠΎΠ±ΡΠΈΠΉ Π±Π°Π»Π», ΠΏΡΠΎΠ²Π΅ΡΡΡ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Ρ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°. ΠΠ°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ dp Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°: ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° ΠΎΡ i Π΄ΠΎ j, ΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠ½Ρ k ΠΌΠ΅ΠΆΠ΄Ρ i ΠΈ j, ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ dp[i][j], ΠΊΠ°ΠΊ ΡΡΠΌΠΌΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΡΠΈΠ°Π½Π³ΡΠ»ΡΡΠΈΠΉ Π»Π΅Π²ΠΎΠΉ ΠΈ ΠΏΡΠ°Π²ΠΎΠΉ ΡΠ°ΡΡΠ΅ΠΉ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°, Π° ΡΠ°ΠΊΠΆΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°, ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π²Π΅ΡΡΠΈΠ½Π°ΠΌΠΈ i, k ΠΈ j. 3β£ΠΠΎΠ·Π²ΡΠ°Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°: ΠΡΠ²Π΅Ρ Π±ΡΠ΄Π΅Ρ Π² dp[0][n-1], ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΡΠ°Π½ΠΈΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΉ ΠΎΠ±ΡΠΈΠΉ Π±Π°Π»Π» ΡΡΠΈΠ°Π½Π³ΡΠ»ΡΡΠΈΠΈ Π΄Π»Ρ Π²ΡΠ΅Π³ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
int minScoreTriangulation(vector<int>& values) {
int n = values.size();
vector<vector<int>> dp(n, vector<int>(n, 0));
for (int length = 2; length < n; ++length) {
for (int i = 0; i < n - length; ++i) {
int j = i + length;
dp[i][j] = INT_MAX;
for (int k = i + 1; k < j; ++k) {
dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j] + values[i] * values[j] * values[k]);
}
}
}
return dp[0][n - 1];
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 460. LFU Cache
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: hard
Π‘ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΡΠΉΡΠ΅ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ
Π΄Π»Ρ ΠΊΠ΅ΡΠ° Ρ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ (Least Frequently Used, LFU).
Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΠΊΠ»Π°ΡΡ LFUCache:
LFUCache(int capacity): ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ
.
int get(int key): ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ°, Π΅ΡΠ»ΠΈ ΠΊΠ»ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π² ΠΊΠ΅ΡΠ΅. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ -1.
void put(int key, int value): ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ°, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΡΠΆΠ΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ, ΠΈΠ»ΠΈ Π²ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠ»ΡΡ, Π΅ΡΠ»ΠΈ Π΅Π³ΠΎ Π΅ΡΠ΅ Π½Π΅Ρ. ΠΠΎΠ³Π΄Π° ΠΊΠ΅Ρ Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ ΡΠ²ΠΎΠ΅ΠΉ Π²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π°Π½Π½ΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ ΠΊΠ»ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ ΡΠ°ΡΡΠΎ, ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΡΠ°Π²ΠΊΠΎΠΉ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. Π ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅, Π΅ΡΠ»ΠΈ ΠΈΠΌΠ΅Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠ»ΡΡΠ΅ΠΉ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ ΡΠ°ΡΡΠΎΡΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, Π°Π½Π½ΡΠ»ΠΈΡΡΠ΅ΡΡΡ Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠ»ΡΡ.
Π§ΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΠΊΠ»ΡΡ, Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° Π² ΠΊΠ΅ΡΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΡΡΠ΅ΡΡΠΈΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. ΠΠ»ΡΡ Ρ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠΌ ΡΡΠ΅ΡΡΠΈΠΊΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ.
ΠΠΎΠ³Π΄Π° ΠΊΠ»ΡΡ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ Π²ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² ΠΊΠ΅Ρ, Π΅Π³ΠΎ ΡΡΠ΅ΡΡΠΈΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π½Π° 1 (ΠΈΠ·-Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ put). Π‘ΡΠ΅ΡΡΠΈΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΠΊΠ»ΡΡΠ° Π² ΠΊΠ΅ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ get ΠΈΠ»ΠΈ put Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ°.
Π€ΡΠ½ΠΊΡΠΈΠΈ get ΠΈ put Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΡΡΠ΅Π΄Π½ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ O(1).
ΠΡΠΈΠΌΠ΅Ρ:
Input ["LFUCache", "put", "put", "get", "put", "get", "get", "put", "get", "get", "get"] [[2], [1, 1], [2, 2], [1], [3, 3], [2], [3], [4, 4], [1], [3], [4]] Output [null, null, null, 1, null, -1, 3, null, -1, 3, 4]π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£insert(int key, int frequency, int value): ΠΡΡΠ°Π²ΠΈΡΡ ΠΏΠ°ΡΡ ΡΠ°ΡΡΠΎΡΠ°-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² cache Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΊΠ»ΡΡΠΎΠΌ. ΠΠΎΠ»ΡΡΠΈΡΡ LinkedHashSet, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π΄Π°Π½Π½ΠΎΠΉ ΡΠ°ΡΡΠΎΡΠ΅ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΡΡΡΠΎΠΉ Set), ΠΈ Π²ΡΡΠ°Π²ΠΈΡΡ Π² Π½Π΅Π³ΠΎ ΠΊΠ»ΡΡ. 2β£int get(int key): ΠΡΠ»ΠΈ ΠΊΠ»ΡΡΠ° Π½Π΅Ρ Π² ΠΊΠ΅ΡΠ΅, Π²Π΅ΡΠ½ΡΡΡ -1. ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠ°ΡΡΠΎΡΡ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΊΠ΅ΡΠ°. Π£Π΄Π°Π»ΠΈΡΡ ΠΊΠ»ΡΡ ΠΈΠ· LinkedHashSet, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ Ρ ΡΠ°ΡΡΠΎΡΠΎΠΉ. ΠΡΠ»ΠΈ minf == frequency ΠΈ LinkedHashSet ΠΏΡΡΡ, ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ minf Π½Π° 1 ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ Π·Π°ΠΏΠΈΡΡ ΡΠ°ΡΡΠΎΡΡ ΠΈΠ· frequencies. ΠΡΠ·Π²Π°ΡΡ insert(key, frequency + 1, value). ΠΠ΅ΡΠ½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. 3β£void put(int key, int value): ΠΡΠ»ΠΈ capacity <= 0, Π²ΡΠΉΡΠΈ. ΠΡΠ»ΠΈ ΠΊΠ»ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΡΠ·Π²Π°ΡΡ get(key). ΠΡΠ»ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΠ΅ΡΠ° ΡΠ°Π²Π΅Π½ capacity, ΡΠ΄Π°Π»ΠΈΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· LinkedHashSet, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ Ρ minf, ΠΈ ΠΈΠ· ΠΊΠ΅ΡΠ°. Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ minf Π² 1. ΠΡΠ·Π²Π°ΡΡ insert(key, 1, value). π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
#include <unordered_map>
#include <list>
class LFUCache {
std::unordered_map<int, std::list<std::pair<int, int>>> frequencies;
std::unordered_map<int, std::pair<int, std::list<std::pair<int, int>>::iterator>> cache;
int capacity;
int minf;
void insert(int key, int frequency, int value) {
frequencies[frequency].emplace_back(key, value);
cache[key] = {frequency, --frequencies[frequency].end()};
}
public:
LFUCache(int capacity) : capacity(capacity), minf(0) {}
int get(int key) {
const auto it = cache.find(key);
if (it == cache.end()) return -1;
const int f = it->second.first;
const auto iter = it->second.second;
const std::pair<int, int> kv = *iter;
frequencies[f].erase(iter);
if (frequencies[f].empty()) {
frequencies.erase(f);
if (minf == f) ++minf;
}
insert(key, f + 1, kv.second);
return kv.second;
}
void put(int key, int value) {
if (capacity <= 0) return;
const auto it = cache.find(key);
if (it != cache.end()) {
it->second.second->second = value;
get(key);
return;
}
if (capacity == cache.size()) {
cache.erase(frequencies[minf].front().first);
frequencies[minf].pop_front();
if (frequencies[minf].empty()) frequencies.erase(minf);
}
minf = 1;
insert(key, 1, value);
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 69. Sqrt(x)
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: easy
ΠΠ°Π½ΠΎ Π½Π΅ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ x. ΠΠ΅ΡΠ½ΠΈΡΠ΅ Π΅Π³ΠΎ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΠΉ ΠΊΠΎΡΠ΅Π½Ρ, ΠΎΠΊΡΡΠ³Π»ΡΠ½Π½ΡΠΉ Π²Π½ΠΈΠ·.
ΠΠ΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π²ΡΠΎΠ΄Π΅ pow ΠΈΠ»ΠΈ sqrt.
ΠΡΠΈΠΌΠ΅Ρ:
Input: x = 4 Output: 2π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£ΠΡΠ»ΠΈ x < 2, ΡΡΠ°Π·Ρ Π²Π΅ΡΠ½ΡΡΡ x, ΡΠ°ΠΊ ΠΊΠ°ΠΊ sqrt(0) = 0, sqrt(1) = 1 2β£ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ 2 Π΄ΠΎ x / 2 ΠΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ: pivot = (left + right) / 2 ΠΡΠ»ΠΈ pivot * pivot == x, Π²Π΅ΡΠ½ΡΡΡ pivot ΠΡΠ»ΠΈ pivot * pivot < x, ΡΠ΄Π²ΠΈΠ½ΡΡΡ left = pivot + 1 ΠΠ½Π°ΡΠ΅ right = pivot - 1 3β£Π ΠΊΠΎΠ½ΡΠ΅ Π²Π΅ΡΠ½ΡΡΡ right, Ρ.ΠΊ. ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΠΌ ΡΠ΅Π»ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΊΠ²Π°Π΄ΡΠ°Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ β€ x π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
int mySqrt(int x) {
if (x < 2) return x;
long num;
int pivot, left = 2, right = x / 2;
while (left <= right) {
pivot = left + (right - left) / 2;
num = (long)pivot * pivot;
if (num > x)
right = pivot - 1;
else if (num < x)
left = pivot + 1;
else
return pivot;
}
return right;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 1047. Remove All Adjacent Duplicates In String
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: easy
ΠΠ°ΠΌ Π΄Π°Π½Π° ΡΡΡΠΎΠΊΠ° s, ΡΠΎΡΡΠΎΡΡΠ°Ρ ΠΈΠ· ΡΡΡΠΎΡΠ½ΡΡ
Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈΡ
Π±ΡΠΊΠ². Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄ΡΠ±Π»ΠΈΠΊΠ°ΡΠΎΠ² Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Π²ΡΠ±ΠΎΡΠ΅ Π΄Π²ΡΡ
ΡΠΎΡΠ΅Π΄Π½ΠΈΡ
ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ
Π±ΡΠΊΠ² ΠΈ ΠΈΡ
ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ. ΠΡ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄ΡΠ±Π»ΠΈΠΊΠ°ΡΠΎΠ² Π² s, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½Π΅ΠΌ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ. ΠΠ΅ΡΠ½ΠΈΡΠ΅ ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΡΡΡΠΎΠΊΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²ΡΠ΅ ΡΠ°ΠΊΠΈΠ΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π΄ΡΠ±Π»ΠΈΠΊΠ°ΡΠΎΠ² Π±ΡΠ΄ΡΡ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Ρ. ΠΠΎΠΆΠ½ΠΎ Π΄ΠΎΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΎΡΠ²Π΅Ρ ΡΠ½ΠΈΠΊΠ°Π»Π΅Π½.
ΠΡΠΈΠΌΠ΅Ρ:
Input: stones = [2,7,4,1,8,1] Output: 1π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£Π‘ΠΎΠ·Π΄Π°ΠΉ ΠΏΡΡΡΠΎΠΉ ΡΡΠ΅ΠΊ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΡΡΡΠΎΠΊΠΈ. 2β£ΠΡΠΎΡ ΠΎΠ΄ΠΈ ΠΏΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌ ΡΡΡΠΎΠΊΠΈ, Π΄ΠΎΠ±Π°Π²Π»ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» Π² ΡΡΠ΅ΠΊ, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ Π²Π΅ΡΡ Π½ΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΡΡΠ΅ΠΊΠ°, ΠΈΠ½Π°ΡΠ΅ ΡΠ΄Π°Π»ΡΠΉ Π²Π΅ΡΡ Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ. 3β£ΠΠΎΡΠ»Π΅ ΠΏΡΠΎΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠΎ ΡΡΡΠΎΠΊΠ΅, ΡΠΎΠ±Π΅ΡΠΈ ΠΎΡΡΠ°Π²ΡΠΈΠ΅ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π² ΡΡΠ΅ΠΊΠ΅ Π² ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΡΡ ΡΡΡΠΎΠΊΡ ΠΈ Π²Π΅ΡΠ½ΠΈ Π΅Π΅. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
string removeDuplicates(string s) {
stack<char> stack;
for (char c : s) {
if (!stack.empty() && stack.top() == c) {
stack.pop();
} else {
stack.push(c);
}
}
string result;
while (!stack.empty()) {
result += stack.top();
stack.pop();
}
reverse(result.begin(), result.end());
return result;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 1426. Counting Elements
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: easy
ΠΠ°Π½ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² arr, ΠΏΠΎΡΡΠΈΡΠ°ΠΉΡΠ΅, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² x Π² Π½Π΅ΠΌ Π΅ΡΡΡ ΡΠ°ΠΊΠΈΡ
, ΡΡΠΎ x + 1 ΡΠ°ΠΊΠΆΠ΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² arr. ΠΡΠ»ΠΈ Π² arr Π΅ΡΡΡ Π΄ΡΠ±Π»ΠΈΠΊΠ°ΡΡ, ΡΡΠΈΡΠ°ΠΉΡΠ΅ ΠΈΡ
ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ.
ΠΡΠΈΠΌΠ΅Ρ:
Input: arr = [1,2,3] Output: 2 Explanation: 1 and 2 are counted cause 2 and 3 are in arr.π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅. 2β£ΠΡΠ΅ΡΠΈΡΡΠΉΡΠ΅ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ x + 1 Π² ΠΌΠ°ΡΡΠΈΠ²Π΅. 3β£Π£Π²Π΅Π»ΠΈΡΡΡΠ΅ ΡΡΠ΅ΡΡΠΈΠΊ, Π΅ΡΠ»ΠΈ x + 1 Π½Π°ΠΉΠ΄Π΅Π½, ΠΈ Π²Π΅ΡΠ½ΠΈΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ°. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
int countElements(vector<int>& arr) {
int count = 0;
for (int x : arr) {
if (integerInArray(arr, x + 1)) {
count++;
}
}
return count;
}
bool integerInArray(vector<int>& arr, int target) {
for (int x : arr) {
if (x == target) {
return true;
}
}
return false;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 895. Maximum Frequency Stack
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: hard
Π Π°Π·ΡΠ°Π±ΠΎΡΠ°ΠΉΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ
, ΠΏΠΎΡ
ΠΎΠΆΡΡ Π½Π° ΡΡΠ΅ΠΊ, ΡΡΠΎΠ±Ρ Π·Π°ΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² ΡΡΠ΅ΠΊ ΠΈ Π²ΡΡΠ°ΡΠΊΠΈΠ²Π°ΡΡ ΠΈΠ· Π½Π΅Π³ΠΎ ΡΠ°ΠΌΡΠΉ ΡΠ°ΡΡΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ. Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΠΊΠ»Π°ΡΡ FreqStack: FreqStack() ΡΡΡΠΎΠΈΡ ΠΏΡΡΡΠΎΠΉ ΡΡΠ΅ΠΊ ΡΠ°ΡΡΠΎΡ. void push(int val) Π·Π°ΡΠ°Π»ΠΊΠΈΠ²Π°Π΅Ρ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ val Π½Π° Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°. int pop() ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ°ΠΌΡΠΉ ΡΠ°ΡΡΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΡΡΠ΅ΠΊΠ΅. ΠΡΠ»ΠΈ Π΅ΡΡΡ ΡΠ°Π²Π΅Π½ΡΡΠ²ΠΎ Π² Π²ΡΠ±ΠΎΡΠ΅ ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠ°ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΡΠΎ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±Π»ΠΈΠΆΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΊ Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ°.
ΠΡΠΈΠΌΠ΅Ρ:
Input ["FreqStack", "push", "push", "push", "push", "push", "push", "pop", "pop", "pop", "pop"] [[], [5], [7], [5], [7], [4], [5], [], [], [], []] Output [null, null, null, null, null, null, null, 5, 7, 5, 4]π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£Π‘ΠΎΠ·Π΄Π°ΡΡ Π΄Π²Π° ΡΠ»ΠΎΠ²Π°ΡΡ: freq Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ°ΡΡΠΎΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈ group Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΡΠ΅ΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠ°ΡΡΠΎΡΡ. 2β£ΠΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ Π΅Π³ΠΎ ΡΠ°ΡΡΠΎΡΡ Π² freq ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π΅Π³ΠΎ Π² ΡΡΠ΅ΠΊ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΎΡΡ Π² group. 3β£ΠΡΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π½Π°ΠΉΡΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΡΠ°ΡΡΠΎΡΡ, ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· ΡΡΠ΅ΠΊΠ° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΎΡΡ ΠΈ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ Π΅Π³ΠΎ ΡΠ°ΡΡΠΎΡΡ Π² freq. ΠΡΠ»ΠΈ ΡΡΠ΅ΠΊ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠΉ ΡΠ°ΡΡΠΎΡΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΏΡΡΡΡΠΌ, ΡΠ΄Π°Π»ΠΈΡΡ Π΅Π³ΠΎ. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class FreqStack {
std::unordered_map<int, int> freq;
std::unordered_map<int, std::stack<int>> group;
int maxfreq = 0;
public:
FreqStack() {}
void push(int val) {
int f = ++freq[val];
if (f > maxfreq) maxfreq = f;
group[f].push(val);
}
int pop() {
int val = group[maxfreq].top();
group[maxfreq].pop();
if (group[maxfreq].empty()) maxfreq--;
freq[val]--;
return val;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 1196. How Many Apples Can You Put into the Basket
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: easy
Π£ Π²Π°Ρ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ±Π»ΠΎΠΊ ΠΈ ΠΊΠΎΡΠ·ΠΈΠ½Π°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ΄Π΅ΡΠΆΠ°ΡΡ Π΄ΠΎ 5000 Π΅Π΄ΠΈΠ½ΠΈΡ Π²Π΅ΡΠ°.
ΠΠ°Π½ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² weight, Π³Π΄Π΅ weight[i] β ΡΡΠΎ Π²Π΅Ρ i-Π³ΠΎ ΡΠ±Π»ΠΎΠΊΠ°. ΠΠ΅ΡΠ½ΠΈΡΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ±Π»ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ Π² ΠΊΠΎΡΠ·ΠΈΠ½Ρ.
ΠΡΠΈΠΌΠ΅Ρ:
Input: weight = [100,200,150,1000] Output: 4 Explanation: All 4 apples can be carried by the basket since their sum of weights is 1450.π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° Π² ΠΌΠΈΠ½-ΠΊΡΡΡ: ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠΉΡΠ΅ ΠΌΠ°ΡΡΠΈΠ² weight Π² ΠΌΠΈΠ½-ΠΊΡΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ. 2β£ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ : ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ apples Π΄Π»Ρ ΠΏΠΎΠ΄ΡΡΠ΅ΡΠ° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ±Π»ΠΎΠΊ ΠΈ units Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π²Π΅ΡΠ° ΠΊΠΎΡΠ·ΠΈΠ½Ρ. 3β£ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ±Π»ΠΎΠΊ Π² ΠΊΠΎΡΠ·ΠΈΠ½Ρ: ΠΠΎΠΊΠ° ΡΠ΅ΠΊΡΡΠΈΠΉ Π²Π΅Ρ ΠΊΠΎΡΠ·ΠΈΠ½Ρ ΠΌΠ΅Π½ΡΡΠ΅ 5000 Π΅Π΄ΠΈΠ½ΠΈΡ ΠΈ Π² ΠΊΡΡΠ΅ ΠΎΡΡΠ°ΡΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ: Π£Π²Π΅Π»ΠΈΡΠΈΠ²Π°ΠΉΡΠ΅ apples Π½Π° 1. Π£Π²Π΅Π»ΠΈΡΠΈΠ²Π°ΠΉΡΠ΅ units Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π½ΠΎΠ΅ ΠΈΠ· ΠΊΡΡΠΈ. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
int maxNumberOfApples(vector<int>& weight) {
priority_queue<int, vector<int>, greater<int>> heap(weight.begin(), weight.end());
int apples = 0, units = 0;
while (!heap.empty() && units + heap.top() <= 5000) {
units += heap.top();
heap.pop();
apples++;
}
return apples;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 1219. Path with Maximum Gold
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: medium
Π Π·ΠΎΠ»ΠΎΡΠΎΠΌ ΡΡΠ΄Π½ΠΈΠΊΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ m x n ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΠ΅ΠΉΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·ΠΎΠ»ΠΎΡΠ° Π² ΡΡΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠ΅, ΠΈΠ»ΠΈ 0, Π΅ΡΠ»ΠΈ ΠΎΠ½Π° ΠΏΡΡΡΠ°.
ΠΠ΅ΡΠ½ΠΈΡΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·ΠΎΠ»ΠΎΡΠ°, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ±ΡΠ°ΡΡ ΠΏΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
ΡΡΠ»ΠΎΠ²ΠΈΡΡ
:
- ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΠ΅ΡΡ Π² ΡΡΠ΅ΠΉΠΊΠ΅, Π²Ρ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΠ΅ Π²ΡΡ Π·ΠΎΠ»ΠΎΡΠΎ ΠΈΠ· ΡΡΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠΈ.
- ΠΠ· Π²Π°ΡΠ΅ΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π³ Π²Π»Π΅Π²ΠΎ, Π²ΠΏΡΠ°Π²ΠΎ, Π²Π²Π΅ΡΡ
ΠΈΠ»ΠΈ Π²Π½ΠΈΠ·.
- ΠΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΠ΅ΡΠ°ΡΡ ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ ΡΡΠ΅ΠΉΠΊΡ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°Π·Π°.
- ΠΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΡΠ΅ΡΠ°ΠΉΡΠ΅ ΡΡΠ΅ΠΉΠΊΡ Ρ 0 Π·ΠΎΠ»ΠΎΡΠΎΠΌ.
- ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΠΈΠ½Π°ΡΡ ΠΈ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ°ΡΡ ΡΠ±ΠΎΡ Π·ΠΎΠ»ΠΎΡΠ° Ρ Π»ΡΠ±ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π² ΡΠ΅ΡΠΊΠ΅, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π·ΠΎΠ»ΠΎΡΠΎ.
ΠΡΠΈΠΌΠ΅Ρ:
Input: grid = [[0,6,0],[5,8,7],[0,9,0]] Output: 24 Explanation: [[0,6,0], [5,8,7], [0,9,0]] Path to get the maximum gold, 9 -> 8 -> 7.π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ°: ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠΉΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² DIRECTIONS Π΄Π»Ρ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ. ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠΎΠΊ ΠΈ ΡΡΠΎΠ»Π±ΡΠΎΠ² Π² ΡΠ΅ΡΠΊΠ΅. ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ maxGold Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠΎΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ Π·ΠΎΠ»ΠΎΡΠ°. 2β£Π€ΡΠ½ΠΊΡΠΈΡ DFS ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ ΡΡΠ΅ΠΊ: Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ dfsBacktrack Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΡΡΠΈ Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ Π·ΠΎΠ»ΠΎΡΠΎΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ DFS ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΡΠ΅ΠΊΠ°. ΠΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΠΉΡΠ΅ Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ, ΠΏΡΠΎΠ²Π΅ΡΡΡ Π²ΡΡ ΠΎΠ΄ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ ΡΠ΅ΡΠΊΠΈ ΠΈΠ»ΠΈ ΡΡΠ΅ΠΉΠΊΠΈ Π±Π΅Π· Π·ΠΎΠ»ΠΎΡΠ°. ΠΠΎΠΌΠ΅ΡΡΡΠ΅ ΡΠ΅ΠΊΡΡΡΡ ΡΡΠ΅ΠΉΠΊΡ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ΅ΡΡΠ½Π½ΡΡ ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡΠ΅ Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΡΠ»Π΅Π΄ΡΠΉΡΠ΅ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΈΠ· ΡΠ΅ΡΡΡΡΡ ΡΠΌΠ΅ΠΆΠ½ΡΡ ΡΡΠ΅Π΅ΠΊ ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·ΠΎΠ»ΠΎΡΠ°, Π΅ΡΠ»ΠΈ Π½Π°ΠΉΠ΄Π΅Π½ Π»ΡΡΡΠΈΠΉ ΠΏΡΡΡ. Π‘Π±ΡΠΎΡΡΡΠ΅ ΡΠ΅ΠΊΡΡΡΡ ΡΡΠ΅ΠΉΠΊΡ Π΄ΠΎ Π΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΉ. 3β£ΠΠΎΠΈΡΠΊ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·ΠΎΠ»ΠΎΡΠ°: ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΡΠΈΠΊΠ»Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠΈ Π² ΡΠ΅ΡΠΊΠ΅, ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·ΠΎΠ»ΠΎΡΠ°, Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΡΡΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠΈ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ dfsBacktrack. ΠΠ±Π½ΠΎΠ²ΠΈΡΠ΅ maxGold ΠΏΡΠΈ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ Π»ΡΡΡΠ΅Π³ΠΎ ΠΏΡΡΠΈ. ΠΠ΅ΡΠ½ΠΈΡΠ΅ maxGold. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
int getMaximumGold(vector<vector<int>>& grid) {
int rows = grid.size(), cols = grid[0].size(), maxGold = 0;
for (int row = 0; row < rows; ++row) {
for (int col = 0; col < cols; ++col) {
maxGold = max(maxGold, dfsBacktrack(grid, rows, cols, row, col));
}
}
return maxGold;
}
private:
int directions[5] = {0, 1, 0, -1, 0};
int dfsBacktrack(vector<vector<int>>& grid, int rows, int cols, int row, int col) {
if (row < 0 || col < 0 || row >= rows || col >= cols || grid[row][col] == 0) return 0;
int originalVal = grid[row][col];
grid[row][col] = 0;
int maxGold = 0;
for (int i = 0; i < 4; ++i) {
maxGold = max(maxGold, dfsBacktrack(grid, rows, cols, row + directions[i], col + directions[i + 1]));
}
grid[row][col] = originalVal;
return maxGold + originalVal;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 468. Validate IP Address
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: medium
ΠΠΎΠΏΡΡΡΠΈΠΌΡΠΉ IPv4-Π°Π΄ΡΠ΅Ρ β ΡΡΠΎ IP Π² ΡΠΎΡΠΌΠ΅ "x1.x2.x3.x4", Π³Π΄Π΅ 0 <= xi <= 255 ΠΈ xi Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π²Π΅Π΄ΡΡΠΈΠ΅ Π½ΡΠ»ΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, "192.168.1.1" ΠΈ "192.168.1.0" ΡΠ²Π»ΡΡΡΡΡ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΌΠΈ IPv4-Π°Π΄ΡΠ΅ΡΠ°ΠΌΠΈ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ "192.168.01.1", "192.168.1.00" ΠΈ "192.168@1.1" ΡΠ²Π»ΡΡΡΡΡ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΌΠΈ IPv4-Π°Π΄ΡΠ΅ΡΠ°ΠΌΠΈ.
ΠΠΎΠΏΡΡΡΠΈΠΌΡΠΉ IPv6-Π°Π΄ΡΠ΅Ρ β ΡΡΠΎ IP Π² ΡΠΎΡΠΌΠ΅ "x1:x2:x3:x4:x5:x6:x7
", Π³Π΄Π΅:
1 <= xi.length <= 4
xi β ΡΡΠΎ ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½Π°Ρ ΡΡΡΠΎΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠΈΡΡΡ, ΡΡΡΠΎΡΠ½ΡΠ΅ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈΠ΅ Π±ΡΠΊΠ²Ρ ('a' Π΄ΠΎ 'f') ΠΈ ΠΏΡΠΎΠΏΠΈΡΠ½ΡΠ΅ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈΠ΅ Π±ΡΠΊΠ²Ρ ('A' Π΄ΠΎ 'F').
ΠΠ΅Π΄ΡΡΠΈΠ΅ Π½ΡΠ»ΠΈ Π² xi Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΡΡ.
ΠΡΠΈΠΌΠ΅Ρ:
Input: queryIP = "172.16.254.1"
Output: "IPv4"
Explanation: This is a valid IPv4 address, return "IPv4".
π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ:
1β£ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π°Π΄ΡΠ΅ΡΠ° IPv4:
Π Π°Π·Π΄Π΅Π»ΠΈΡΡ IP Π½Π° ΡΠ΅ΡΡΡΠ΅ ΡΠ°ΡΡΠΈ ΠΏΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ".".
ΠΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΡ:
Π―Π²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΠΎΠ½Π° ΡΠ΅Π»ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ ΠΌΠ΅ΠΆΠ΄Ρ 0 ΠΈ 255.
ΠΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»ΠΈ ΠΎΠ½Π° Π²Π΅Π΄ΡΡΠΈΡ
Π½ΡΠ»Π΅ΠΉ (ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ β ΡΠΈΡΠ»ΠΎ "0").
2β£ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π°Π΄ΡΠ΅ΡΠ° IPv6:
Π Π°Π·Π΄Π΅Π»ΠΈΡΡ IP Π½Π° Π²ΠΎΡΠ΅ΠΌΡ ΡΠ°ΡΡΠ΅ΠΉ ΠΏΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ":".
ΠΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΡ:
Π―Π²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΠΎΠ½Π° ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠ΅ΡΠΈΡΠ½ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ Π΄Π»ΠΈΠ½ΠΎΠΉ ΠΎΡ 1 Π΄ΠΎ 4 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ².
3β£ΠΡΠ»ΠΈ IP Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ· ΡΠΎΡΠΌΠ°ΡΠΎΠ², Π²Π΅ΡΠ½ΡΡΡ "Neither".
π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
std::string validateIPv4(const std::string& IP) {
std::vector<std::string> nums = split(IP, '.');
if (nums.size() != 4) return "Neither";
for (std::string& x : nums) {
if (x.size() == 0 || x.size() > 3) return "Neither";
if (x[0] == '0' && x.size() != 1) return "Neither";
if (!std::all_of(x.begin(), x.end(), ::isdigit)) return "Neither";
if (std::stoi(x) > 255) return "Neither";
}
return "IPv4";
}
std::string validateIPv6(const std::string& IP) {
std::vector<std::string> nums = split(IP, ':');
if (nums.size() != 8) return "Neither";
std::unordered_set<char> hexdigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f', 'A', 'B', 'C', 'D', 'E', 'F'};
for (std::string& x : nums) {
if (x.size() == 0 || x.size() > 4) return "Neither";
for (char ch : x) {
if (hexdigits.find(ch) == hexdigits.end()) return "Neither";
}
}
return "IPv6";
}
std::string validIPAddress(const std::string& IP) {
if (std::count(IP.begin(), IP.end(), '.') == 3) {
return validateIPv4(IP);
} else if (std::count(IP.begin(), IP.end(), ':') == 7) {
return validateIPv6(IP);
} else {
return "Neither";
}
}
private:
std::vector<std::string> split(const std::string& s, char delimiter) {
std::vector<std::string> tokens;
std::string token;
std::istringstream tokenStream(s);
while (std::getline(tokenStream, token, delimiter)) {
tokens.push_back(token);
}
return tokens;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 360. Sort Transformed Array
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: medium
ΠΠ°Π½ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² ΡΠ΅Π»ΡΡ
ΡΠΈΡΠ΅Π» nums ΠΈ ΡΡΠΈ ΡΠ΅Π»ΡΡ
ΡΠΈΡΠ»Π° a, b ΠΈ c. ΠΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΈΠ΄Π° f(x) = ax^2 + bx + c ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ nums[i] Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΈ Π²Π΅ΡΠ½ΠΈΡΠ΅ ΠΌΠ°ΡΡΠΈΠ² Π² ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅.
ΠΡΠΈΠΌΠ΅Ρ:
Input: nums = [-4,-2,2,4], a = 1, b = 3, c = 5
Output: [3,9,15,33]
π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ:
1β£ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° nums ΠΏΠΎ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ f(x) = ax^2 + bx + c ΠΈ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π² ΠΌΠ°ΡΡΠΈΠ² transformed. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΏΠΎΡΠ°Π·ΡΡΠ΄Π½ΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π΄Π»Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΌΠ°ΡΡΠΈΠ²Π° transformed.
2β£ΠΠΎΡΠ°Π·ΡΡΠ΄Π½Π°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°
ΠΠ°Ρ
ΠΎΠ΄ΠΈΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠΈΡΡ. ΠΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΏΠΎΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ ΠΊ ΠΌΠ°ΡΡΠΈΠ²Ρ transformed.
3β£Π‘ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΏΠΎ ΡΠΈΡΡΠ΅
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠΈΡΡΡ (ΡΠ°Π·ΡΡΠ΄Π°) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΏΠΎΠ΄ΡΡΠ΅Ρ Π΄Π»Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΌΠ°ΡΡΠΈΠ²Π°.
π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
#include <vector>
#include <algorithm>
#include <cmath>
class Solution {
public:
std::vector<int> sortTransformedArray(std::vector<int>& nums, int a, int b, int c) {
std::vector<int> transformed(nums.size());
for (size_t i = 0; i < nums.size(); ++i) {
transformed[i] = a * nums[i] * nums[i] + b * nums[i] + c;
}
radixSort(transformed);
return transformed;
}
private:
void radixSort(std::vector<int>& array) {
int maxElement = abs(array[0]);
for (int num : array) {
maxElement = std::max(maxElement, abs(num));
}
for (int placeValue = 1; maxElement / placeValue > 0; placeValue *= 10) {
countingSortByDigit(array, placeValue);
}
std::vector<int> negatives, positives;
for (int num : array) {
if (num < 0) negatives.push_back(num);
else positives.push_back(num);
}
std::sort(negatives.begin(), negatives.end());
std::sort(positives.begin(), positives.end());
std::merge(negatives.begin(), negatives.end(), positives.begin(), positives.end(), array.begin());
}
void countingSortByDigit(std::vector<int>& array, int placeValue) {
std::vector<int> output(array.size());
std::vector<int> count(10, 0);
for (int num : array) {
int digit = (abs(num) / placeValue) % 10;
count[digit]++;
}
for (int i = 1; i < 10; ++i) {
count[i] += count[i - 1];
}
for (int i = array.size() - 1; i >= 0; --i) {
int num = array[i];
int digit = (abs(num) / placeValue) % 10;
output[count[digit] - 1] = num;
count[digit]--;
}
for (size_t i = 0; i < array.size(); ++i) {
array[i] = output[i];
}
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 994. Rotting Oranges
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: medium
ΠΠ°Π½ m x n ΡΠ΅ΡΠΊΠ°, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΠ΅ΠΉΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΡΠ΅Ρ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ:
0, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠ΅Π΅ ΠΏΡΡΡΡΡ ΡΡΠ΅ΠΉΠΊΡ,
1, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠ΅Π΅ ΡΠ²Π΅ΠΆΠΈΠΉ Π°ΠΏΠ΅Π»ΡΡΠΈΠ½,
2, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠ΅Π΅ Π³Π½ΠΈΠ»ΠΎΠΉ Π°ΠΏΠ΅Π»ΡΡΠΈΠ½.
ΠΠ°ΠΆΠ΄ΡΡ ΠΌΠΈΠ½ΡΡΡ Π»ΡΠ±ΠΎΠΉ ΡΠ²Π΅ΠΆΠΈΠΉ Π°ΠΏΠ΅Π»ΡΡΠΈΠ½, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² 4-Ρ
Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎ ΡΠΌΠ΅ΠΆΠ½ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠ΅ Ρ Π³Π½ΠΈΠ»ΡΠΌ Π°ΠΏΠ΅Π»ΡΡΠΈΠ½ΠΎΠΌ, ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π³Π½ΠΈΠ»ΡΠΌ.
ΠΠ΅ΡΠ½ΠΈΡΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΌΠΈΠ½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΎΠΉΡΠΈ, ΠΏΠΎΠΊΠ° Π² ΡΡΠ΅ΠΉΠΊΠ΅ Π½Π΅ ΠΎΡΡΠ°Π½Π΅ΡΡΡ ΡΠ²Π΅ΠΆΠΈΡ
Π°ΠΏΠ΅Π»ΡΡΠΈΠ½ΠΎΠ². ΠΡΠ»ΠΈ ΡΡΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π΅ΡΠ½ΠΈΡΠ΅ -1.
ΠΡΠΈΠΌΠ΅Ρ:
Input: grid = [[2,1,1],[0,1,1],[1,0,1]] Output: -1 Explanation: The orange in the bottom left corner (row 2, column 0) is never rotten, because rotting only happens 4-directionally.π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΈ ΠΏΠΎΠ΄ΡΡΠ΅Ρ Π°ΠΏΠ΅Π»ΡΡΠΈΠ½ΠΎΠ²: ΠΡΠΎΠΉΠ΄ΠΈΡΠ΅ ΠΏΠΎ Π²ΡΠ΅ΠΉ ΡΠ΅ΡΠΊΠ΅, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π²ΡΠ΅ Π³Π½ΠΈΠ»ΡΠ΅ Π°ΠΏΠ΅Π»ΡΡΠΈΠ½Ρ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΈ ΠΏΠΎΠ΄ΡΡΠΈΡΠ°ΠΉΡΠ΅ ΠΎΠ±ΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ²Π΅ΠΆΠΈΡ Π°ΠΏΠ΅Π»ΡΡΠΈΠ½ΠΎΠ². ΠΡΠ»ΠΈ Π½Π΅Ρ ΡΠ²Π΅ΠΆΠΈΡ Π°ΠΏΠ΅Π»ΡΡΠΈΠ½ΠΎΠ², Π²Π΅ΡΠ½ΠΈΡΠ΅ 0. 2β£ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ BFS Π΄Π»Ρ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ Π³Π½ΠΈΠ»ΠΈ: ΠΡΠΏΠΎΠ»Π½ΡΠΉΡΠ΅ BFS, Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π²ΡΠ΅Ρ Π³Π½ΠΈΠ»ΡΡ Π°ΠΏΠ΅Π»ΡΡΠΈΠ½ΠΎΠ², Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π°ΠΏΠ΅Π»ΡΡΠΈΠ½ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π³Π½ΠΈΠ»ΡΠΌ, ΡΠΌΠ΅Π½ΡΡΠ°ΠΉΡΠ΅ ΡΡΠ΅ΡΡΠΈΠΊ ΡΠ²Π΅ΠΆΠΈΡ Π°ΠΏΠ΅Π»ΡΡΠΈΠ½ΠΎΠ². ΠΡΠ»ΠΈ ΡΠ²Π΅ΠΆΠΈΡ Π°ΠΏΠ΅Π»ΡΡΠΈΠ½ΠΎΠ² Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΎΡΡΠ°Π»ΠΎΡΡ, Π²Π΅ΡΠ½ΠΈΡΠ΅ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΌΠΈΠ½ΡΡ. 3β£ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΡΡΠ°Π²ΡΠΈΡ ΡΡ ΡΠ²Π΅ΠΆΠΈΡ Π°ΠΏΠ΅Π»ΡΡΠΈΠ½ΠΎΠ²: ΠΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ BFS Π²ΡΠ΅ Π΅ΡΠ΅ ΠΎΡΡΠ°ΡΡΡΡ ΡΠ²Π΅ΠΆΠΈΠ΅ Π°ΠΏΠ΅Π»ΡΡΠΈΠ½Ρ, Π²Π΅ΡΠ½ΠΈΡΠ΅ -1. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
int orangesRotting(vector<vector<int>>& grid) {
queue<pair<int, int>> q;
int freshCount = 0;
int minutes = 0;
vector<vector<int>> directions = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
for (int i = 0; i < grid.size(); i++) {
for (int j = 0; j < grid[0].size(); j++) {
if (grid[i][j] == 2) {
q.push({i, j});
} else if (grid[i][j] == 1) {
freshCount++;
}
}
}
if (freshCount == 0) return 0;
while (!q.empty()) {
int size = q.size();
for (int i = 0; i < size; i++) {
auto [x, y] = q.front(); q.pop();
for (auto dir : directions) {
int nx = x + dir[0], ny = y + dir[1];
if (nx >= 0 && nx < grid.size() && ny >= 0 && ny < grid[0].size() && grid[nx][ny] == 1) {
grid[nx][ny] = 2;
freshCount--;
q.push({nx, ny});
}
}
}
if (!q.empty()) {
minutes++;
}
}
return freshCount == 0 ? minutes : -1;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 234. Palindrome Linked List
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: easy
ΠΠ°Π½ Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΎΠ΄Π½ΠΎΡΠ²ΡΠ·Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°. ΠΠ΅ΡΠ½ΠΈΡΠ΅ true, Π΅ΡΠ»ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ°Π»ΠΈΠ½Π΄ΡΠΎΠΌΠΎΠΌ, ΠΈ false Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅.
ΠΡΠΈΠΌΠ΅Ρ:
Input: head = [1,2,2,1] Output: trueπ¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£ΠΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΡΠ²ΡΠ·Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° Π² ΠΌΠ°ΡΡΠΈΠ²: ΠΡΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎ ΠΏΡΠΎΠΉΠ΄ΠΈΡΠ΅ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΡΠ²ΡΠ·Π½ΠΎΠΌΡ ΡΠΏΠΈΡΠΊΡ, Π΄ΠΎΠ±Π°Π²Π»ΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΌΠ°ΡΡΠΈΠ². ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ currentNode, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π½Π° ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΠ·Π΅Π». ΠΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠΉΡΠ΅ currentNode.val Π² ΠΌΠ°ΡΡΠΈΠ² ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠΉΡΠ΅ currentNode, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΡΠΊΠ°Π·ΡΠ²Π°Π» Π½Π° currentNode.next. ΠΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠΈΠΊΠ», ΠΊΠΎΠ³Π΄Π° currentNode ΡΠΊΠ°ΠΆΠ΅Ρ Π½Π° null. 2β£ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΌΠ°ΡΡΠΈΠ²Π° Π½Π° ΠΏΠ°Π»ΠΈΠ½Π΄ΡΠΎΠΌ: ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ Ρ Π΄Π²ΡΠΌΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΌΠ°ΡΡΠΈΠ²Π° Π½Π° ΠΏΠ°Π»ΠΈΠ½Π΄ΡΠΎΠΌ. Π Π°Π·ΠΌΠ΅ΡΡΠΈΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π² Π½Π°ΡΠ°Π»Π΅ ΠΌΠ°ΡΡΠΈΠ²Π°, Π° Π΄ΡΡΠ³ΠΎΠΉ Π² ΠΊΠΎΠ½ΡΠ΅. ΠΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°Π³Π΅ ΠΏΡΠΎΠ²Π΅ΡΡΠΉΡΠ΅, ΡΠ°Π²Π½Ρ Π»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ, ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΠΉΡΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΠΊ ΡΠ΅Π½ΡΡΡ, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ Π½Π΅ Π²ΡΡΡΠ΅ΡΡΡΡΡ. 3β£Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ: ΠΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ·Π»ΠΎΠ², Π° Π½Π΅ ΡΠ°ΠΌΠΈ ΡΠ·Π»Ρ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ node_1.val == node_2.val Π΄Π»Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠ·Π»ΠΎΠ². Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΠ·Π»ΠΎΠ² ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² node_1 == node_2 Π½Π΅ Π΄Π°ΡΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
bool isPalindrome(ListNode* head) {
vector<int> vals;
ListNode* currentNode = head;
while (currentNode != nullptr) {
vals.push_back(currentNode->val);
currentNode = currentNode->next;
}
int front = 0;
int back = vals.size() - 1;
while (front < back) {
if (vals[front] != vals[back]) {
return false;
}
front++;
back--;
}
return true;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 567. Permutation in String
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: medium
ΠΠ°Π½Ρ Π΄Π²Π΅ ΡΡΡΠΎΠΊΠΈ s1 ΠΈ s2. ΠΠ΅ΡΠ½ΠΈΡΠ΅ true, Π΅ΡΠ»ΠΈ s2 ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΊΡ s1, ΠΈΠ»ΠΈ false Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅.
ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π²Π΅ΡΠ½ΠΈΡΠ΅ true, Π΅ΡΠ»ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΠΎΠ²ΠΎΠΊ s1 ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠΎΠΉ s2.
ΠΡΠΈΠΌΠ΅Ρ:
Input: s1 = "ab", s2 = "eidbaooo"
Output: true
Explanation: s2 contains one permutation of s1 ("ba").
π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ:
1β£Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² Π΄Π»Ρ ΠΏΠΎΠ΄ΡΡΠ΅ΡΠ° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΡΡΡΠΎΠΊΠ΅ s1. ΠΠ°ΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² Π΄Π»Ρ ΠΏΠ΅ΡΠ²ΡΡ
len(s1) ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΡΡΡΠΎΠΊΠΈ s2.
2β£ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΊΠΎΠ»ΡΠ·ΡΡΠ΅Π΅ ΠΎΠΊΠ½ΠΎ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΡΡΠΎΠΊΠ΅ s2. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΎΠΊΠ½Π° ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΠΌΠ°ΡΡΠΈΠ² ΠΏΠΎΠ΄ΡΡΠ΅ΡΠ° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ Π΅Π³ΠΎ Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ Π΄Π»Ρ ΡΡΡΠΎΠΊΠΈ s1.
3β£ΠΡΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ²Ρ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Π½Π° Π»ΡΠ±ΠΎΠΌ ΡΡΠ°ΠΏΠ΅, Π²Π΅ΡΠ½ΡΡΡ true. ΠΡΠ»ΠΈ ΠΎΠΊΠ½ΠΎ Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ ΠΊΠΎΠ½ΡΠ° ΡΡΡΠΎΠΊΠΈ s2 ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, Π²Π΅ΡΠ½ΡΡΡ false.
π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
bool checkInclusion(string s1, string s2) {
int s1Len = s1.size(), s2Len = s2.size();
if (s1Len > s2Len) return false;
vector<int> s1Count(26, 0), s2Count(26, 0);
for (int i = 0; i < s1Len; i++) {
s1Count[s1[i] - 'a']++;
s2Count[s2[i] - 'a']++;
}
for (int i = 0; i < s2Len - s1Len; i++) {
if (s1Count == s2Count) return true;
s2Count[s2[i] - 'a']--;
s2Count[s2[i + s1Len] - 'a']++;
}
return s1Count == s2Count;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 736. Parse Lisp Expression
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: hard
ΠΠ°ΠΌ Π΄Π°Π½ ΠΌΠ°ΡΡΠΈΠ² asteroids, ΡΠΎΡΡΠΎΡΡΠΈΠΉ ΠΈΠ· ΡΠ΅Π»ΡΡ
ΡΠΈΡΠ΅Π», ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΡ
Π°ΡΡΠ΅ΡΠΎΠΈΠ΄Ρ Π² ΡΡΠ΄. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π°ΡΡΠ΅ΡΠΎΠΈΠ΄Π° Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅Ρ, Π° Π·Π½Π°ΠΊ - Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ (ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ - Π²ΠΏΡΠ°Π²ΠΎ, ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ - Π²Π»Π΅Π²ΠΎ). ΠΠ°ΠΆΠ΄ΡΠΉ Π°ΡΡΠ΅ΡΠΎΠΈΠ΄ Π΄Π²ΠΈΠΆΠ΅ΡΡΡ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΡΡ. ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π°ΡΡΠ΅ΡΠΎΠΈΠ΄ΠΎΠ² ΠΏΠΎΡΠ»Π΅ Π²ΡΠ΅Ρ
ΡΡΠΎΠ»ΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΉ. ΠΡΠ»ΠΈ Π΄Π²Π° Π°ΡΡΠ΅ΡΠΎΠΈΠ΄Π° ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡ, ΠΌΠ΅Π½ΡΡΠΈΠΉ ΠΈΠ· Π½ΠΈΡ
Π²Π·ΠΎΡΠ²Π΅ΡΡΡ. ΠΡΠ»ΠΈ ΠΎΠ±Π° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΡΠΎ Π²Π·ΠΎΡΠ²ΡΡΡΡ ΠΎΠ±Π°. ΠΠ²Π° Π°ΡΡΠ΅ΡΠΎΠΈΠ΄Π°, Π΄Π²ΠΈΠΆΡΡΠΈΠ΅ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΡΡΡΠ΅ΡΡΡΡΡ.
ΠΡΠΈΠΌΠ΅Ρ:
Input: expression = "(let x 2 (mult x (let x 3 y 4 (add x y))))" Output: 14π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΎΡΠ΅Π½ΠΊΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. 2β£ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ² Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ (let, add, mult, ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ). 3β£ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ»ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Ρ ΡΡΠ΅ΡΠΎΠΌ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
int evaluate(string expression) {
return evaluate(expression, {});
}
private:
int evaluate(string expression, unordered_map<string, int> env) {
if (expression[0] != '(') {
if (isdigit(expression[0]) || expression[0] == '-') {
return stoi(expression);
}
return env[expression];
}
vector<string> tokens = tokenize(expression);
if (tokens[0] == "let") {
for (size_t i = 1; i < tokens.size() - 2; i += 2) {
env[tokens[i]] = evaluate(tokens[i + 1], env);
}
return evaluate(tokens.back(), env);
} else if (tokens[0] == "add") {
return evaluate(tokens[1], env) + evaluate(tokens[2], env);
} else if (tokens[0] == "mult") {
return evaluate(tokens[1], env) * evaluate(tokens[2], env);
}
return 0;
}
vector<string> tokenize(const string& expression) {
vector<string> tokens;
string token;
int parens = 0;
istringstream iss(expression);
char c;
while (iss >> c) {
if (c == '(') {
parens++;
if (parens == 1) continue;
} else if (c == ')') {
parens--;
if (parens == 0) {
tokens.push_back(tokenize(token));
token = "";
continue;
}
} else if (c == ' ' && parens == 1) {
if (!token.empty()) {
tokens.push_back(token);
token = "";
}
continue;
}
token += c;
}
if (!token.empty()) {
tokens.push_back(token);
}
return tokens;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 482. License Key Formatting
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: easy
ΠΠ°ΠΌ Π΄Π°Π½ Π»ΠΈΡΠ΅Π½Π·ΠΈΠΎΠ½Π½ΡΠΉ ΠΊΠ»ΡΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ s, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΡΡΠΎΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· Π±ΡΠΊΠ²Π΅Π½Π½ΠΎ-ΡΠΈΡΡΠΎΠ²ΡΡ
ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈ ΡΠΈΡΠ΅. Π‘ΡΡΠΎΠΊΠ° ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° n + 1 Π³ΡΡΠΏΠΏ Ρ ΠΏΠΎΠΌΠΎΡΡΡ n ΡΠΈΡΠ΅. ΠΠ°ΠΌ ΡΠ°ΠΊΠΆΠ΅ Π΄Π°Π½ΠΎ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ k.
ΠΡ Ρ
ΠΎΡΠΈΠΌ ΠΏΠ΅ΡΠ΅ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΠΎΠΊΡ s ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΊΠ°ΠΆΠ΄Π°Ρ Π³ΡΡΠΏΠΏΠ° ΡΠΎΠ΄Π΅ΡΠΆΠ°Π»Π° ΡΠΎΠ²Π½ΠΎ k ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π³ΡΡΠΏΠΏΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠΎΡΠΎΡΠ΅ k, Π½ΠΎ Π²ΡΠ΅ ΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Ρ
ΠΎΡΡ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΌΠ²ΠΎΠ». ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ Π³ΡΡΠΏΠΏΠ°ΠΌΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π²ΡΡΠ°Π²Π»Π΅Π½ΠΎ ΡΠΈΡΠ΅, ΠΈ Π²ΡΠ΅ ΡΡΡΠΎΡΠ½ΡΠ΅ Π±ΡΠΊΠ²Ρ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π² ΠΏΡΠΎΠΏΠΈΡΠ½ΡΠ΅.
ΠΠ΅ΡΠ½ΠΈΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π»ΠΈΡΠ΅Π½Π·ΠΈΠΎΠ½Π½ΡΠΉ ΠΊΠ»ΡΡ.
ΠΡΠΈΠΌΠ΅Ρ:
Input: s = "5F3Z-2e-9-w", k = 4 Output: "5F3Z-2E9W" Explanation: The string s has been split into two parts, each part has 4 characters. Note that the two extra dashes are not needed and can be removed.π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ count Π² 0 Π΄Π»Ρ ΠΏΠΎΠ΄ΡΡΠ΅ΡΠ° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π³ΡΡΠΏΠΏΠ΅. Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ans Π² ΠΏΡΡΡΡΡ ΡΡΡΠΎΠΊΡ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°. 2β£ΠΡΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΡΠΎΠΏΡΡΠΊΠ°ΠΉΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ '-'. ΠΡΠ»ΠΈ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ» Π½Π΅ '-', Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π΅Π³ΠΎ Π² ans ΠΈ ΡΠ²Π΅Π»ΠΈΡΡΡΠ΅ count Π½Π° 1. ΠΡΠ»ΠΈ count Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ k, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ '-' Π² ans ΠΈ ΡΠ±ΡΠΎΡΡΡΠ΅ count. 3β£ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΡΠΎΠ²Π΅ΡΡΡΠ΅, Π΅ΡΡΡ Π»ΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ans ΡΠΈΡΠ΅, ΠΈ ΡΠ΄Π°Π»ΠΈΡΠ΅ Π΅Π³ΠΎ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ Π΅ΡΡΡ. ΠΠ΅ΡΠ΅Π²Π΅ΡΠ½ΠΈΡΠ΅ ΡΡΡΠΎΠΊΡ ans ΠΈ Π²Π΅ΡΠ½ΠΈΡΠ΅ Π΅Ρ. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
string licenseKeyFormatting(string s, int k) {
int count = 0;
string ans;
for (int i = s.length() - 1; i >= 0; i--) {
if (s[i] != '-') {
ans.push_back(toupper(s[i]));
count++;
if (count == k) {
ans.push_back('-');
count = 0;
}
}
}
if (!ans.empty() && ans.back() == '-') {
ans.pop_back();
}
reverse(ans.begin(), ans.end());
return ans;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 376. Wiggle Subsequence
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: medium
ΠΠΎΠ»Π΅Π±Π»ΡΡΠ°ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ β ΡΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ°Π·Π½ΠΎΡΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ ΡΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π΄ΡΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΈ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ. ΠΠ΅ΡΠ²Π°Ρ ΡΠ°Π·Π½ΠΎΡΡΡ (Π΅ΡΠ»ΠΈ ΠΎΠ½Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ) ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ, ΡΠ°ΠΊ ΠΈ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ. ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Ρ Π΄Π²ΡΠΌΡ Π½Π΅ΡΠ°Π²Π½ΡΠΌΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎ ΡΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠ»Π΅Π±Π»ΡΡΠΈΠΌΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡΠΌΠΈ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, [1, 7, 4, 9, 2, 5] β ΡΡΠΎ ΠΊΠΎΠ»Π΅Π±Π»ΡΡΠ°ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ°Π·Π½ΠΎΡΡΠΈ (6, -3, 5, -7, 3) ΡΠ΅ΡΠ΅Π΄ΡΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΈ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ.
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π½Π΅Π΅, [1, 4, 7, 2, 5] ΠΈ [1, 7, 4, 5, 5] Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠ»Π΅Π±Π»ΡΡΠΈΠΌΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡΠΌΠΈ. ΠΠ΅ΡΠ²Π°Ρ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π΅ ΡΠ°Π·Π½ΠΎΡΡΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠ΅, Π° Π²ΡΠΎΡΠ°Ρ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΠ°Π·Π½ΠΎΡΡΡ ΡΠ°Π²Π½Π° Π½ΡΠ»Ρ.
ΠΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΡΠ»Ρ) ΠΈΠ· ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Ρ ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡΡΠ°Π²ΡΠΈΡ
ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΈΡ
ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅.
ΠΠ°Π½ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² nums, Π²Π΅ΡΠ½ΠΈΡΠ΅ Π΄Π»ΠΈΠ½Ρ ΡΠ°ΠΌΠΎΠΉ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ ΠΊΠΎΠ»Π΅Π±Π»ΡΡΠ΅ΠΉΡΡ ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈΠ· nums.
ΠΡΠΈΠΌΠ΅Ρ:
Input: nums = [1,7,4,9,2,5] Output: 6 Explanation: The entire sequence is a wiggle sequence with differences (6, -3, 5, -7, 3).π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£ΠΠ»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π΄Π²Π° ΠΌΠ°ΡΡΠΈΠ²Π° Π΄Π»Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½Π°Π·Π²Π°Π½Π½ΡΡ up ΠΈ down. ΠΡΠΈ ΠΌΠ°ΡΡΠΈΠ²Ρ Π±ΡΠ΄ΡΡ Ρ ΡΠ°Π½ΠΈΡΡ Π΄Π»ΠΈΠ½Ρ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠΈΡ ΠΊΠΎΠ»Π΅Π±Π»ΡΡΠΈΡ ΡΡ ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ, Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΠΈΡ ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ Π²ΠΎΡΡ ΠΎΠ΄ΡΡΠΈΠΌ ΠΈΠ»ΠΈ Π½ΠΈΡΡ ΠΎΠ΄ΡΡΠΈΠΌ ΠΊΠΎΠ»Π΅Π±Π°Π½ΠΈΠ΅ΠΌ. 2β£up[i] ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ Π΄Π»ΠΈΠ½Π΅ ΡΠ°ΠΌΠΎΠΉ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ ΠΊΠΎΠ»Π΅Π±Π»ΡΡΠ΅ΠΉΡΡ ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, Π΅ΡΠ»ΠΈ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ i-ΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΠ΅ΠΉΡΡ Π²ΠΎΡΡ ΠΎΠ΄ΡΡΠΈΠΌ ΠΊΠΎΠ»Π΅Π±Π°Π½ΠΈΠ΅ΠΌ. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, down[i] ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ Π΄Π»ΠΈΠ½Π΅ ΡΠ°ΠΌΠΎΠΉ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ ΠΊΠΎΠ»Π΅Π±Π»ΡΡΠ΅ΠΉΡΡ ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π΅ΡΠ»ΠΈ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ i-ΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΠ΅ΠΉΡΡ Π½ΠΈΡΡ ΠΎΠ΄ΡΡΠΈΠΌ ΠΊΠΎΠ»Π΅Π±Π°Π½ΠΈΠ΅ΠΌ. 3β£up[i] ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π½Π°Ρ ΠΎΠ΄ΠΈΠΌ Π²ΠΎΡΡ ΠΎΠ΄ΡΡΠ΅Π΅ ΠΊΠΎΠ»Π΅Π±Π°Π½ΠΈΠ΅, Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΠ΅Π΅ΡΡ Π½Π° i-ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅. Π§ΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ up[i], Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΠ΅ΡΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΠΏΠΎΠ΄ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ, Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΠΈΡ ΡΡ Π½ΠΈΡΡ ΠΎΠ΄ΡΡΠΈΠΌ ΠΊΠΎΠ»Π΅Π±Π°Π½ΠΈΠ΅ΠΌ, Ρ.Π΅. down[j], Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ j<i ΠΈ nums[i]>nums[j]. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, down[i] ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ Π½ΠΈΡΡ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ»Π΅Π±Π°Π½ΠΈΡ. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
if (nums.size() < 2)
return nums.size();
vector<int> up(nums.size(), 0);
vector<int> down(nums.size(), 0);
for (int i = 1; i < nums.size(); i++) {
for (int j = 0; j < i; j++) {
if (nums[i] > nums[j]) {
up[i] = max(up[i], down[j] + 1);
} else if (nums[i] < nums[j]) {
down[i] = max(down[i], up[j] + 1);
}
}
}
return 1 + max(down[nums.size() - 1], up[nums.size() - 1]);
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 1197. Minimum Knight Moves
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: medium
ΠΠ° Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΡΠ°Ρ
ΠΌΠ°ΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠ΅ Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ ΠΎΡ -Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΡΡΠΈ Π΄ΠΎ +Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΡΡΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΊΠΎΠ½Ρ Π½Π° ΠΊΠ»Π΅ΡΠΊΠ΅ [0, 0].
Π£ ΠΊΠΎΠ½Ρ Π΅ΡΡΡ 8 Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ
Ρ
ΠΎΠ΄ΠΎΠ². ΠΠ°ΠΆΠ΄ΡΠΉ Ρ
ΠΎΠ΄ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π΄Π²Π° ΠΊΠ²Π°Π΄ΡΠ°ΡΠ° Π² ΠΊΠ°ΡΠ΄ΠΈΠ½Π°Π»ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ, Π·Π°ΡΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΠΊΠ²Π°Π΄ΡΠ°Ρ Π² ΠΎΡΡΠΎΠ³ΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ.
ΠΠ΅ΡΠ½ΠΈΡΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π³ΠΎΠ², Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΡ
Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ Π½Π° ΠΊΠ»Π΅ΡΠΊΡ [x, y]. ΠΠ°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ, ΡΡΠΎ ΠΎΡΠ²Π΅Ρ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ.
ΠΡΠΈΠΌΠ΅Ρ:
Input: x = 5, y = 5 Output: 4 Explanation: [0, 0] β [2, 1] β [4, 2] β [3, 4] β [5, 5]π¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΡΡΠΊΡΡΡ Π΄Π°Π½Π½ΡΡ : ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠΉΡΠ΅ Π΄Π²Π΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΠΈ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΉ: ΠΎΠ΄Π½Ρ Π΄Π»Ρ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΎΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ, Π΄ΡΡΠ³ΡΡ β ΠΎΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ. ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠΉΡΠ΅ Π΄Π²Π΅ ΠΊΠ°ΡΡΡ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΠΎΡΠ΅ΡΠ΅Π½Π½ΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΠΈ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΉ: ΠΎΠ΄Π½Ρ Π΄Π»Ρ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΎΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ, Π΄ΡΡΠ³ΡΡ β ΠΎΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ. 2β£Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄Π²ΡΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π² ΡΠΈΡΠΈΠ½Ρ (BFS): ΠΡΠΏΠΎΠ»Π½ΡΠΉΡΠ΅ ΡΠ°Π³ΠΈ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ, ΡΠ°ΡΡΠΈΡΡΡ ΠΊΡΡΠ³ΠΈ ΠΏΠΎΠΈΡΠΊΠ° ΠΊΠ°ΠΊ ΠΎΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ, ΡΠ°ΠΊ ΠΈ ΠΎΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ. ΠΡΠ»ΠΈ ΠΊΡΡΠ³ΠΈ ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°ΡΡΡΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΠΉΡΠ΅ ΡΡΠΌΠΌΡ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΉ Π΄ΠΎ ΡΠΎΡΠΊΠΈ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΡ. 3β£Π Π°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΊΡΡΠ³ΠΎΠ² ΠΏΠΎΠΈΡΠΊΠ°: ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΈ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ ΡΠ°ΡΡΠΈΡΡΠΉΡΠ΅ ΠΊΡΡΠ³ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ Ρ ΠΎΠ΄Π°ΠΌ ΠΊΠΎΠ½Ρ. ΠΠ±Π½ΠΎΠ²Π»ΡΠΉΡΠ΅ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠΉΡΠ΅ Π½ΠΎΠ²ΡΠ΅ ΡΠΎΡΠΊΠΈ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π΅ΡΠ΅ Π½Π΅ Π±ΡΠ»ΠΈ ΠΏΠΎΡΠ΅ΡΠ΅Π½Ρ. Π£Π²Π΅Π»ΠΈΡΠΈΠ²Π°ΠΉΡΠ΅ units Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½Π½ΠΎΠ΅ ΠΈΠ· ΠΊΡΡΠΈ. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
#include <deque>
#include <unordered_map>
#include <string>
#include <vector>
using namespace std;
class Solution {
public:
int minKnightMoves(int x, int y) {
vector<vector<int>> offsets = {{1, 2}, {2, 1}, {2, -1}, {1, -2},
{-1, -2}, {-2, -1}, {-2, 1}, {-1, 2}};
deque<vector<int>> originQueue = {{0, 0, 0}};
unordered_map<string, int> originDistance = {{"0,0", 0}};
deque<vector<int>> targetQueue = {{x, y, 0}};
unordered_map<string, int> targetDistance = {{to_string(x) + "," + to_string(y), 0}};
while (true) {
auto origin = originQueue.front();
originQueue.pop_front();
string originKey = to_string(origin[0]) + "," + to_string(origin[1]);
if (targetDistance.find(originKey) != targetDistance.end()) {
return origin[2] + targetDistance[originKey];
}
auto target = targetQueue.front();
targetQueue.pop_front();
string targetKey = to_string(target[0]) + "," + to_string(target[1]);
if (originDistance.find(targetKey) != originDistance.end()) {
return target[2] + originDistance[targetKey];
}
for (auto& offset : offsets) {
vector<int> nextOrigin = {origin[0] + offset[0], origin[1] + offset[1], origin[2] + 1};
string nextOriginKey = to_string(nextOrigin[0]) + "," + to_string(nextOrigin[1]);
if (originDistance.find(nextOriginKey) == originDistance.end()) {
originQueue.push_back(nextOrigin);
originDistance[nextOriginKey] = nextOrigin[2];
}
vector<int> nextTarget = {target[0] + offset[0], target[1] + offset[1], target[2] + 1};
string nextTargetKey = to_string(nextTarget[0]) + "," + to_string(nextTarget[1]);
if (targetDistance.find(nextTargetKey) == targetDistance.end()) {
targetQueue.push_back(nextTarget);
targetDistance[nextTargetKey] = nextTarget[2];
}
}
}
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ3 239
ΠΠ°Π΄Π°ΡΠ°: 1041. Robot Bounded In Circle
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ: medium
ΠΠ° Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΠΏΠ»ΠΎΡΠΊΠΎΡΡΠΈ ΡΠΎΠ±ΠΎΡ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΡΠΎΠΈΡ Π² ΡΠΎΡΠΊΠ΅ (0, 0) ΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ Π»ΠΈΡΠΎΠΌ Π½Π° ΡΠ΅Π²Π΅Ρ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ: ΡΠ΅Π²Π΅ΡΠ½ΠΎΠ΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ - ΡΡΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠΈ y. ΡΠΆΠ½ΠΎΠ΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ - ΡΡΠΎ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠΈ y. Π²ΠΎΡΡΠΎΡΠ½ΠΎΠ΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ - ΡΡΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠΈ x. Π·Π°ΠΏΠ°Π΄Π½ΠΎΠ΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ - ΡΡΠΎ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠΈ x. ΡΠΎΠ±ΠΎΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΠ΄Π½Ρ ΠΈΠ· ΡΡΠ΅Ρ
ΠΊΠΎΠΌΠ°Π½Π΄: "G": ΠΈΠ΄ΡΠΈ ΠΏΡΡΠΌΠΎ 1 Π΅Π΄ΠΈΠ½ΠΈΡΡ. "L": ΠΏΠΎΠ²Π΅ΡΠ½ΡΡΡ Π½Π° 90 Π³ΡΠ°Π΄ΡΡΠΎΠ² Π²Π»Π΅Π²ΠΎ (Ρ.Π΅, "R": ΠΏΠΎΠ²Π΅ΡΠ½ΡΡΡ Π½Π° 90 Π³ΡΠ°Π΄ΡΡΠΎΠ² Π²ΠΏΡΠ°Π²ΠΎ (Ρ. Π΅. ΠΏΠΎ ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠ΅). Π ΠΎΠ±ΠΎΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅Ρ ΠΈΡ
Π΄ΠΎ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΡΡΠΈ. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ true ΡΠΎΠ³Π΄Π° ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π² ΠΏΠ»ΠΎΡΠΊΠΎΡΡΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΎΠΊΡΡΠΆΠ½ΠΎΡΡΡ, ΡΠ°ΠΊΠ°Ρ, ΡΡΠΎ ΡΠΎΠ±ΠΎΡ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠΊΠΈΠ΄Π°Π΅Ρ Π΅Π΅.
ΠΡΠΈΠΌΠ΅Ρ:
Input: instructions = "GGLLGG" Output: trueπ¨βπ» ΠΠ»Π³ΠΎΡΠΈΡΠΌ: 1β£ΠΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΎΠ±ΠΎΡΠ°: ΠΡ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ±ΠΎΡ Π΄Π²ΠΈΠΆΠ΅ΡΡΡ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ΅ΡΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄. ΠΡΠ»ΠΈ ΠΎΠ½ Π²Π΅ΡΠ½Π΅ΡΡΡ Π² Π½Π°ΡΠ°Π»ΡΠ½ΡΡ ΡΠΎΡΠΊΡ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄, Π·Π½Π°ΡΠΈΡ, ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ ΠΏΠΎ Π·Π°ΠΌΠΊΠ½ΡΡΠΎΠΉ ΡΡΠ°Π΅ΠΊΡΠΎΡΠΈΠΈ, ΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΡΠ»ΠΎΠ²ΠΈΡ Π·Π°Π΄Π°ΡΠΈ. 2β£ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ: Π ΠΎΠ±ΠΎΡ ΠΌΠΎΠΆΠ΅Ρ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ Π½Π° ΡΠ΅Π²Π΅Ρ (0), Π²ΠΎΡΡΠΎΠΊ (1), ΡΠ³ (2), ΠΈΠ»ΠΈ Π·Π°ΠΏΠ°Π΄ (3). ΠΡΠΈ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²Π΅ΠΊΡΠΎΡΠΎΠ² (dx, dy): ΡΠ΅Π²Π΅Ρ (0, 1), Π²ΠΎΡΡΠΎΠΊ (1, 0), ΡΠ³ (0, -1), Π·Π°ΠΏΠ°Π΄ (-1, 0). 3β£ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄: ΠΡΠΎΠΉΠ΄ΠΈΡΠ΅ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΡΠΎΠ±ΠΎΡΠ° ΠΈ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ Π΄Π²ΠΈΠΆΠ΅ΡΡΡ. ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΠΎΠ±ΠΎΡΠ°: ΠΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅, Π²Π΅ΡΠ½ΡΠ»ΡΡ Π»ΠΈ ΡΠΎΠ±ΠΎΡ Π² Π½Π°ΡΠ°Π»ΡΠ½ΡΡ ΡΠΎΡΠΊΡ (0, 0) ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅. ΠΡΠ»ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΡΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ, ΡΠΎΠ±ΠΎΡ Π±ΡΠ΄Π΅Ρ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ ΠΏΠΎ Π·Π°ΠΌΠΊΠ½ΡΡΠΎΠΉ ΡΡΠ°Π΅ΠΊΡΠΎΡΠΈΠΈ. π Π Π΅ΡΠ΅Π½ΠΈΠ΅:
class Solution {
public:
bool isRobotBounded(string instructions) {
vector<vector<int>> directions = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
int x = 0, y = 0, direction = 0;
for (char instruction : instructions) {
if (instruction == 'G') {
x += directions[direction][0];
y += directions[direction][1];
} else if (instruction == 'L') {
direction = (direction + 3) % 4;
} else if (instruction == 'R') {
direction = (direction + 1) % 4;
}
}
return (x == 0 && y == 0) || direction != 0;
}
};
Π‘ΡΠ°Π²Ρ π ΠΈ Π·Π°Π±ΠΈΡΠ°ΠΉ π ΠΠ°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ