Python의 LeetCode - 1일 차
1. 투썸
정수 nums의 배열과 정수 target이 주어지면 두 숫자의 인덱스를 반환하여 합계가 target이 되도록 합니다.
각 입력에 정확히 하나의 솔루션이 있다고 가정할 수 있으며 동일한 요소를 두 번 사용할 수 없습니다.
어떤 순서로든 답변을 반환할 수 있습니다.
예 1:
입력: 숫자 = [2,7,11,15], 대상 = 9
출력: [0,1]
설명: nums[0] + nums[1] == 9이므로 [0, 1]을 반환합니다.
예 2:
입력: 숫자 = [3,2,4], 대상 = 6
출력: [1,2]
예 3:
입력: 숫자 = [3,3], 대상 = 6
출력: [0,1]
제약:
2 <= 숫자.길이 <= 104
-109 <= 숫자[i] <= 109
-109 <= 대상 <= 109
하나의 유효한 답변만 존재합니다.
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
#BruteForce
for i in range(len(nums)):
for j in range(i+1,len(nums)):
if nums[i]+nums[j]==target:
return [i,j]
return [-1,-1]
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
#optimal---->TC O(N)----->SC=O(N)
pair_check={}
count=0
for i in range(len(nums)):
b=target-nums[i]
if b in pair_check:
return[pair_check[b],i]
else:
pair_check[nums[i]]=i
return []
2. 주식을 사고 파는 최적의 시간
price[i]가 i번째 날의 주어진 주식 가격인 배열 price가 주어집니다.
특정 주식을 매수하기 위해 하루를 선택하고 해당 주식을 매도하기 위해 미래의 다른 날을 선택하여 이익을 극대화하려고 합니다.
이 트랜잭션에서 얻을 수 있는 최대 이익을 반환합니다. 이익을 얻을 수 없으면 0을 반환합니다.
예 1:
입력: 가격 = [7,1,5,3,6,4]
출력: 5
설명: 2일에 매수(가격 = 1)하고 5일에 매도(가격 = 6), 이익 = 6-1 = 5.
판매하기 전에 구매해야 하므로 2일 구매 및 1일 판매는 허용되지 않습니다.
예 2:
입력: 가격 = [7,6,4,3,1]
출력: 0
설명: 이 경우 트랜잭션이 수행되지 않으며 최대 이익 = 0입니다.
제약:
1 <= 가격.길이 <= 105
0 <= 가격[i] <= 104
class Solution:
def maxProfit(self, prices: List[int]) -> int:
#TC--->O(N) SC--->O(1)
buy=prices[0]
profit=0
for i in range(1,len(prices)):
diff=prices[i]-buy
buy=min(buy,prices[i])
profit=max(profit,diff)
return profit
3. 플러스원
정수 배열 숫자로 표시되는 큰 정수가 주어집니다. 여기서 각 숫자[i]는 정수의 i번째 숫자입니다. 숫자는 왼쪽에서 오른쪽 순서로 가장 중요한 것부터 가장 중요하지 않은 것까지 정렬됩니다. 큰 정수에는 선행 0이 포함되지 않습니다.
큰 정수를 1씩 증가시키고 결과 숫자 배열을 반환합니다.
예 1:
입력: 숫자 = [1,2,3]
출력: [1,2,4]
설명: 배열은 정수 123을 나타냅니다.
1씩 증가하면 123 + 1 = 124가 됩니다.
따라서 결과는 [1,2,4]여야 합니다.
예 2:
입력: 숫자 = [4,3,2,1]
출력: [4,3,2,2]
설명: 배열은 정수 4321을 나타냅니다.
1씩 증가하면 4321 + 1 = 4322가 됩니다.
따라서 결과는 [4,3,2,2]여야 합니다.
예 3:
입력: 숫자 = [9]
출력: [1,0]
설명: 배열은 정수 9를 나타냅니다.
1씩 증가하면 9 + 1 = 10이 됩니다.
따라서 결과는 [1,0]이어야 합니다.
제약:
1 <= 숫자.길이 <= 100
0 <= 숫자[i] <= 9
숫자는 선행 0을 포함하지 않습니다.
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
#TC--->O(N) SC---->O(1)
dig_len=len(digits)
for i in reversed(range(dig_len)):
digits[i]+=1
if digits[i]<10:
return digits
else:
digits[i]=0
digits.insert(0,1)
return digits
4. 0 이동
정수 배열 nums가 주어지면 0이 아닌 요소의 상대적인 순서를 유지하면서 모든 0을 끝으로 이동합니다.
배열의 복사본을 만들지 않고 이 작업을 제자리에서 수행해야 합니다.
예 1:
입력: 숫자 = [0,1,0,3,12]
출력: [1,3,12,0,0]
예 2:
입력: 숫자 = [0]
출력: [0]
제약:
1 <= 숫자.길이 <= 104
-231 <= 숫자[i] <= 231 - 1
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
#TC=O(N) SC=O(1)
"""
Do not return anything, modify nums in-place instead.
"""
prev_index=0
for i in range(len(nums)):
if nums[i]!=0:
nums[i],nums[prev_index]=nums[prev_index],nums[i]
prev_index+=1
Saipavan Seelamsetty의 개선 사항에 대한 피드백에 감사드립니다.
Reference
이 문제에 관하여(Python의 LeetCode - 1일 차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/saipavan_seelamsetty/day-175-leetcode-python-45e6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)