알고리즘/LeetCode
LeetCode 27. Remove Element
Timha
2023. 8. 24. 22:23
이 문제도 동일하게 nums의 배열을 그대로 두고 내부에서 수를 바꿔줘야했다.
숫자를 delete로 지워줄까 생각했지만 투포인터로 사용하게되면 O(n)으로 풀 수 있겠다 생각이 들어서 투포인터를 사용해서 풀었다.
앞포인터의 숫자가 제거해야 할 val의 숫자와 동일하다면 뒷포인터와 앞포인터의 숫자를 교체 한 후
뒷포인터의 위치를 -1 움직여준다.
다시 동일하게 시행한 후 숫자를 모두 교체한 후 교체된 횟수만큼 뒤에서 pop으로 숫자를 제거해준다.
class Solution(object):
def removeElement(self, nums, val):
cnt = 0 #숫자의 카운트
move =0
num_count = len(nums)-1
while move <= num_count:
changeNum= nums[num_count]
if nums[move]== val :
nums[num_count] = nums[move]
nums[move] = changeNum
num_count-=1
cnt+=1
else:
move+=1
for __ in range(cnt):
nums.pop()
#sudo
class Solution(object):
def removeElement(self, nums, val):
cnt = 교체횟수
move = 앞 포인터
num_count = 뒷 포인터
while 포인터의 위치 <= nums의 갯수: # move 포인터의 위치가 위치포인터를 넘어서거나 동일해지면 정지
changeNum= nums[뒷 포인터]
if nums[포인터의위치]== val :
nums[num_count] = nums[move] # 앞포인터와 뒷 포인터의 숫자를 맞교환
nums[move] = changeNum # 앞포인터와 뒷 포인터의 숫자를 맞교환
num_count-=1 # 뒷 포인터 위치 -1 감소
cnt+=1 # 교체한 횟수
else:
move+=1 # 앞포인터 위치 +1 증가
for __ in range(cnt): # 교체한 횟수만큼 pop실행
nums.pop()
투표를 제일 많이 받은 코드
def removeElement(self, nums, val):
i = 0
for x in nums:
if x != val:
nums[i] = x
i += 1
return i
알고보니 그냥 nums의 리스트 안에 숫자를 넣어서 제출하면 되는 문제였다.. 영어이슈 ..