leetcode

27. Remove Element

_HelloWorld_ 2024. 8. 6. 10:48

Description

Easy
Topics
Companies
Hint
Given an integer array nums and an integer val, remove all occurrences of val in nums in-place. The order of the elements may be changed. Then return the number of elements in nums which are not equal to val.

Consider the number of elements in nums which are not equal to val be k, to get accepted, you need to do the following things:

Change the array nums such that the first k elements of nums contain the elements which are not equal to val. The remaining elements of nums are not important as well as the size of nums.
Return k.
Custom Judge:

The judge will test your solution with the following code:

int[] nums = [...]; // Input array
int val = ...; // Value to remove
int[] expectedNums = [...]; // The expected answer with correct length.
                            // It is sorted with no values equaling val.

int k = removeElement(nums, val); // Calls your implementation

assert k == expectedNums.length;
sort(nums, 0, k); // Sort the first k elements of nums
for (int i = 0; i < actualLength; i++) {
    assert nums[i] == expectedNums[i];
}
If all assertions pass, then your solution will be accepted.

 

Example 1:

Input: nums = [3,2,2,3], val = 3
Output: 2, nums = [2,2,_,_]
Explanation: Your function should return k = 2, with the first two elements of nums being 2.
It does not matter what you leave beyond the returned k (hence they are underscores).
Example 2:

Input: nums = [0,1,2,2,3,0,4,2], val = 2
Output: 5, nums = [0,1,4,0,3,_,_,_]
Explanation: Your function should return k = 5, with the first five elements of nums containing 0, 0, 1, 3, and 4.
Note that the five elements can be returned in any order.
It does not matter what you leave beyond the returned k (hence they are underscores).
 

Constraints:

0 <= nums.length <= 100
0 <= nums[i] <= 50
0 <= val <= 100

Code

func removeElement(nums []int, val int) int {
	if len(nums) == 0 {
		return 0
	}

	checkNum := 0 

	for i := 0; i < len(nums); i++ {
		if nums[i] != val {
			nums[checkNum] = nums[i]
			checkNum++
		}
	}

	return checkNum
}

 

시간 복잡도 분석

  1. 초기 조건 확인:
    • len(nums) == 0인지 확인하는 것은 상수 시간 O(1)이 소요됩니다.
  2. 주 반복문:
    • for i := 0; i < len(nums); i++ 구문은 배열 nums의 모든 요소를 한 번씩 순회합니다.
    • 각 반복의 내부 연산은 상수 시간 O(1)입니다.
    • 따라서, 주 반복문의 시간 복잡도는 O(n)입니다.

여기서 n은 입력 배열 nums의 길이입니다. 따라서 전체 함수의 시간 복잡도는 O(n)입니다.

'leetcode' 카테고리의 다른 글

28. Find the Index of the First Occurrence in a String  (0) 2024.08.06
35. Search Insert Position  (0) 2024.08.06
21. Merge Two Sorted Lists  (0) 2024.07.17
20. Valid Parentheses  (0) 2024.07.12
14. Longest Common Prefix  (0) 2024.07.12