-
-
Notifications
You must be signed in to change notification settings - Fork 195
[Jay-Mo-99] Week 1 #686
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
[Jay-Mo-99] Week 1 #686
Changes from all commits
Commits
Show all changes
15 commits
Select commit
Hold shift + click to select a range
3879c7b
contains-duplicate
Jay-Mo-99 c12452b
contains-duplicate
Jay-Mo-99 326d290
contains-duplicate
Jay-Mo-99 85f70d1
solve: valid-palindrome
Jay-Mo-99 f82a779
Fix: including the Jay-Mo-99.py
Jay-Mo-99 84c6595
Fix: Add missing newline to Python files
Jay-Mo-99 e35428f
Fix: Add newline at end of Jay-Mo-99.py
Jay-Mo-99 c3bfa2c
Fix: Add newline at end of contains-duplicate/Jay-Mo-99.py
Jay-Mo-99 60c7a91
Modified: contains-duplicate/Jay-Mo-99.py
Jay-Mo-99 58988dd
Fix: Add missing newline at EOF
Jay-Mo-99 9877f42
Edit: Delete if statement and return condition directely
Jay-Mo-99 269e6ab
Edit: Delete if statement and return condition directely
Jay-Mo-99 dc6b6ad
Solve: topKFrequent
Jay-Mo-99 a560bdd
Solve: Longest Consecutive Sequence
Jay-Mo-99 3dc6420
Solve: House Robber
Jay-Mo-99 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
class Solution(object): | ||
def containsDuplicate(self, nums): | ||
""" | ||
:type nums: List[int] | ||
:rtype: bool | ||
""" | ||
#해석 | ||
#sets는 복수 요소를 허용하지 않는다(sets don't allow duplicate elements.) | ||
#만약 set에 기반된 list가 기존 nums와 길이가 다르다면 duplicate element가 있었다는 뜻이다. | ||
#If the length of the set created from nums is different from the original list(nums), It means there are duplicates. | ||
|
||
#Big O | ||
#N: 주어진 배열 nums의 길이(Length of the input list nums) | ||
|
||
#Time Complexity: O(N) | ||
#- set은 nums의 길이 n에 기반하여 생성된다(Creating a set from nums): O(N) | ||
#- 생성된 list와 기존 nums와의 비교는 상수(Comparing the lengths between created list and original list) : O(1) | ||
|
||
#Space Complexity: O(N) | ||
#-set은 nums의 길이에 의해 생성되므로 n에 영향받음(The set requires extra space depends on the size of nums) : O(N) | ||
return len(list(set(nums))) != len(nums) #set된 list와 기존 nums의 len이 일치하지 않는다면 true(duplicate), 아니면 false | ||
|
||
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
# --- 해석 --- | ||
#매개변수 nums 를 순회하면서 nums[i] 일때의 최대 누적값을 업데이트 한다 | ||
#prev1은 현재까지의 최고 누적금액, prev2는 이전 집까지의 최고 누적금액이다. | ||
#현재 집 nums[i] 를 도둑질 하려면, 이전 집까지의 최고금액(prev2) + 현재 집(nums[i])이다. | ||
#현재 집 nums[i]를 도둑질에 제외하려면 현재까지의 최고 금엑(prev1) 이다. | ||
#loop 당 저 둘의 최댓값을 선택하여 current변수에 update해준다. | ||
|
||
# --- Big O | ||
#N: 매개변수 nums의 길이가 N이다. | ||
|
||
# Time Complexity: O(N) | ||
#- for loop 는 nums[0] 부터 nums[len(nums)]만큼 순회: O(N) | ||
|
||
# Space Complexity: O(1) | ||
#-current,prev1,prev2 는 nums와 무관한 상수 메로리 할당: O(1) | ||
|
||
|
||
class Solution(object): | ||
def rob(self, nums): | ||
""" | ||
:type nums: List[int] | ||
:rtype: int | ||
""" | ||
#prev1: 현재 집까지의 최고 금액 | ||
#prev2: 이이전 집까지의 최고 금액 | ||
prev1,prev2=0,0 | ||
|
||
for num in nums: | ||
#current는 prev1과 prev2+num 중 큰 값을 update | ||
current = max(prev1,prev2+num) | ||
prev2 = prev1 #current업데이트 이후 prev1(현재 최고금액) 이 prev2(이어진 집까지 최고금액)가된다 | ||
prev1= current #prev1은 현 num까지 고려된 current의 값이다. (현재 최고 금액액) | ||
return prev1 | ||
nums = [2,7,9,3,1] | ||
solution = Solution() | ||
solution.rob(nums) | ||
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
# --- 해석 --- | ||
#매개변수 nums 를 set으로 바꿔서 중복제거 | ||
#set을 list로 전환하여 sort하여 오름차순으로 변환 | ||
#for loop 로 nums[1]부터 nums[len(nums)-1] 에 접근 | ||
#nums[i]-nums[i-1] =1 이면 변수 current를 증가, longest는 current의 최댓값을 업데이트 | ||
#만약 해당 조건을 만족하지 않는다면 current를 1로 초기화, 이후 longest 값 return | ||
|
||
# --- Big O | ||
#N: 매개변수 nums의 길이가 N이다. | ||
|
||
# Time Complexity: O(N) | ||
#- set(nums)는 nums의모든 요소를 하나씩 순회하며 중복 제거 : O(N) | ||
#- list(set(nums)) 는 data type을 변환하면서 nums의 갯수만큼 data를 추가 생성: O(N) | ||
#- for loop 는 nums[1] 부터 nums[len(nums)-1]만큼 순회: O(N) | ||
|
||
# Space Complexity: O(N) | ||
#-nums = list(set(nums)): list(),set(),dict() 이런 data type을 변환할때마다 N만큼 공간 추가할당: O(N) | ||
#-longest,current 변수는 상수 : O(1) | ||
|
||
class Solution(object): | ||
def longestConsecutive(self, nums): | ||
""" | ||
:type nums: List[int] | ||
:rtype: int | ||
""" | ||
#If the nums doesn't have elements, return 0 | ||
if len(nums) ==0: | ||
return 0 | ||
#중복제거 set | ||
nums = list(set(nums)) | ||
#sort | ||
nums.sort() | ||
print(nums) | ||
|
||
#Variables | ||
longest = 1 | ||
current = 1 | ||
|
||
#Approah all element of nums for checking the sequnece number or not | ||
for i in range(1,len(nums)): | ||
if nums[i] == nums[i-1] + 1: | ||
current +=1 #current는 nums[i]와 nums[i-1]의 차이가 1이면 +1해줌. | ||
longest = max(longest, current) #return값을 위해 currrent가 가장 크도록 업데이트 | ||
else:#연속 되지 않을 시 current 1로 초기화 | ||
current =1 | ||
print(longest) | ||
return longest | ||
|
||
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
#해석 | ||
#nums를 dictionary로 전환한다. nums의 기존 element가 key, element의 갯수를 value값으로 지정한다. | ||
#value값이 큰 순서대로 dictionary의 요소를 정렬한다 | ||
#그중 0에서 k-1까지의 key값만을 반환한다. | ||
|
||
#Big O | ||
#N: 주어진 list의 길이 nums (Length of the input list nums) | ||
#M: count 딕셔너리의 고유한 key 의 갯수 | ||
|
||
#Time Complexity: O(NLogN) | ||
#- count: N의 길이에 기반하여 생성된다 : O(N) | ||
#- sorted_count: 파이썬의 sorted 메소드는 Timesort 알고리즘 기반의 비교 기반 정렬 알고리즘 | ||
# 리스트의 길이가 M이면 sorted()는 요소들을 쪼개고 병합하여 정렬한다. 대략 M개의 요소를 logM번 비교 | ||
|
||
#Space Complexity: O(N) | ||
#- count: M개에 기반하여 Dictionary 공간 저장: O(M) | ||
#- sorted_count: count.items의 갯수에 기반하여 공간 저장 : O(M) | ||
#- dic_count: 상위 요소 갯수(k개) 만큼 저장 : O(k) | ||
#- 최종: O(N) + O(M) + O(k): k는 최대 M개 만큼 가능하고 M은 최대 N개만큼 가능하다. | ||
|
||
class Solution(object): | ||
def topKFrequent(self, nums, k): | ||
""" | ||
:type nums: List[int] | ||
:type k: int | ||
:rtype: List[int] | ||
""" | ||
|
||
#Create dictionary which have a key(element of nums) and value(count num of the element) | ||
count = {} | ||
for i in nums: | ||
try: count[i] += 1 | ||
except: count[i] = 1 | ||
|
||
#Sort depends on the value descending order | ||
sorted_count = sorted(count.items(),key=lambda x:x[1],reverse=True) | ||
#k까지의 요소만을 dictionary data type으로 convert | ||
dic_count = dict(sorted_count[:k]) | ||
#Return keys | ||
return dic_count.keys() | ||
|
||
|
||
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
# --- 해석 --- | ||
#매개변수 s를 소문자로 변환 후 non alpha numeric(알파벳과 숫자 이외의 모든 것)을 제거하고 빈칸을 replace로 제거한 후 temp에 저장한다 | ||
#temp와 temp를 뒤집힌 string(temp[::-1])을 비교하여, 둘이 같으면 palindrome이다. | ||
|
||
# --- Big O | ||
#N: 매개변수 s의 길이가 N이다. | ||
|
||
# Time Complexity: O(N) | ||
#- temp는 s의 길이에 기반하여 생성된다: O(N) | ||
#- 문자열 뒤집기(temp[::-1])도 s의 길이에 기반한다 : O(N) | ||
#- temp == temp[::-1]는 두 문자열이 길이와 문자 하나하나가 같은지 확인 :O(N) | ||
|
||
# Space Complexity: O(N) | ||
#-temp는 s의 길이에 의해 생성되므로 n에 영향받음(The temp requires extra space depends on the size of s) : O(N) | ||
|
||
class Solution(object): | ||
def isPalindrome(self, s): | ||
""" | ||
:type s: str | ||
:rtype: bool | ||
""" | ||
|
||
#removes all non alpha numeric(only accept alphabet and number) items from the s | ||
temp = lower(s) | ||
temp = " ".join(re.split("[^a-zA-Z0-9]*",temp)).replace(" ","") | ||
#Compare with temp and reverse temp | ||
#If they are same, it is palindrome | ||
return temp == temp[::-1] | ||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
temp = ''.join 을 한다면 뒤에 replace를 안해도 될 것 같습니다!
→ temp = "".join(re.split("[^a-zA-Z0-9]*",temp))