Skip to content

Commit ab65560

Browse files
authored
Merge pull request #1465 from ivan1016017/november24
adding algo
2 parents 95114d1 + a104459 commit ab65560

File tree

6 files changed

+135
-0
lines changed

6 files changed

+135
-0
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from typing import List, Union, Collection, Mapping, Optional
2+
from abc import ABC, abstractmethod
3+
4+
class Solution:
5+
def twoSum(self, nums: List[int], target: int) -> List[int]:
6+
7+
answer = dict()
8+
9+
for k, v in enumerate(nums):
10+
11+
if v in answer:
12+
return [answer[v], k]
13+
else:
14+
answer[target - v] = k
15+
16+
return []
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
from typing import List, Union, Collection, Mapping, Optional
2+
from abc import ABC, abstractmethod
3+
import re
4+
5+
class Solution:
6+
def isPalindrome(self, s: str) -> bool:
7+
8+
# To lowercase
9+
s = s.lower()
10+
11+
# Remove non-alphanumeric characters
12+
s = re.sub(pattern=r'[^a-zA-Z0-9]', repl='', string=s)
13+
14+
# Determine if s is palindrome or not
15+
16+
len_s = len(s)
17+
18+
for i in range(len_s//2):
19+
20+
if s[i] != s[len_s - 1 - i]:
21+
return False
22+
23+
return True
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from typing import List, Union, Collection, Mapping, Optional
2+
from abc import ABC, abstractmethod
3+
4+
class Solution:
5+
def minimumSwaps(self, nums: List[int]) -> int:
6+
7+
min_num = min(nums)
8+
max_num = max(nums)
9+
10+
id_min = nums.index(min_num)
11+
12+
new_nums = [min_num] + nums[:id_min] + nums[id_min + 1:]
13+
14+
id_max = new_nums[::-1].index(max_num)
15+
16+
return id_min + id_max
17+
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
from typing import List, Union, Collection, Mapping, Optional
2+
from abc import ABC, abstractmethod
3+
from collections import Counter
4+
5+
class Solution:
6+
def minimumKeypresses(self, s: str) -> int:
7+
"""
8+
Greedy approach: Assign most frequent characters to 1-press slots
9+
10+
Example: s = "apple"
11+
Frequency: {'p': 2, 'a': 1, 'l': 1, 'e': 1}
12+
13+
Assignment:
14+
- 'p' (freq=2) → position 0 → 1 press → total: 2 * 1 = 2
15+
- 'a' (freq=1) → position 1 → 1 press → total: 1 * 1 = 1
16+
- 'l' (freq=1) → position 2 → 1 press → total: 1 * 1 = 1
17+
- 'e' (freq=1) → position 3 → 1 press → total: 1 * 1 = 1
18+
19+
Total: 2 + 1 + 1 + 1 = 5
20+
"""
21+
22+
# Count character frequencies
23+
freq = Counter(s)
24+
print(freq)
25+
26+
# Sort by frequency (descending) - greedy choice
27+
counts = sorted(freq.values(), reverse=True)
28+
print(counts)
29+
30+
total_presses = 0
31+
32+
# Calculate presses based on position
33+
for position, frequency in enumerate(counts):
34+
# Positions 0-8: 1 press (9 slots)
35+
# Positions 9-17: 2 presses (9 slots)
36+
# Positions 18-26: 3 presses (9 slots)
37+
presses_per_char = (position // 9) + 1
38+
total_presses += presses_per_char * frequency
39+
40+
return total_presses
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from typing import List, Union, Collection, Mapping, Optional
2+
from abc import ABC, abstractmethod
3+
4+
class Solution:
5+
def plusOne(self, digits: List[int]) -> List[int]:
6+
7+
len_digits = len(digits)
8+
9+
for i in range(len_digits - 1, -1, -1):
10+
11+
if digits[i] != 9:
12+
digits[i] += 1
13+
break
14+
else:
15+
digits[i] = 0
16+
17+
if digits[0] == 0:
18+
return [1] + digits
19+
else:
20+
return digits
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import unittest
2+
from src.my_project.interviews.top_150_questions_round_21\
3+
.plus_one import Solution
4+
5+
class PlusOneTestCase(unittest.TestCase):
6+
7+
def test_leading_one(self):
8+
solution = Solution()
9+
output = solution.plusOne(digits=[9])
10+
target = [1, 0]
11+
for k, v in enumerate(target):
12+
self.assertEqual(v, output[k])
13+
14+
def test_no_leading_one(self):
15+
solution = Solution()
16+
output = solution.plusOne(digits=[1, 2])
17+
target = [1, 3]
18+
for k, v in enumerate(target):
19+
self.assertEqual(v, output[k])

0 commit comments

Comments
 (0)