LeetCode 알고리즘 27:자바 제거 요소

1578 단어 LeetCode
제목 은 배열 nums 와 값 val 을 정 합 니 다.모든 값 이 val 과 같은 요 소 를 제자리 에서 제거 하고 제거 한 배열 의 새로운 길 이 를 되 돌려 야 합 니 다.
추가 배열 공간 을 사용 하지 마 십시오.입력 배열 을 제자리 에서 수정 하고 O(1)추가 공간 을 사용 하 는 조건 에서 완성 해 야 합 니 다.
원소 의 순 서 를 바 꿀 수 있다.너 는 배열 에서 새로운 길이 뒤의 요 소 를 초과 하 는 것 을 고려 할 필요 가 없다.
예제 1:주어진 nums=[3,2,2,3],val=3,함 수 는 새로운 길이 2 를 되 돌려 야 하고 nums 의 앞의 두 요 소 는 모두 2 이다.너 는 배열 에서 새로운 길이 뒤의 요 소 를 초과 하 는 것 을 고려 할 필요 가 없다.
예 2:주어진 nums=[0,1,2,2,3,0,4,2],val=2,함 수 는 새로운 길이 5 를 되 돌려 야 하고 nums 중의 다섯 가지 요 소 는 0,1,3,0,4 이다.이 다섯 개의 요 소 는 임의의 순서 가 될 수 있 음 을 주의 하 세 요.너 는 배열 에서 새로운 길이 뒤의 요 소 를 초과 하 는 것 을 고려 할 필요 가 없다.
사고방식 공간의 복잡 도 는 O(1)이다.즉,체인 테이블 을 전체적으로 복제 할 수 없다.그래서 하나의 포인터 와 같은 조작 이 필요 합 니 다.이전 을 뒤로 옮 겨 다 니 는 것 을 고려 하여 제거 규칙 에 맞 는 데 이 터 를 배열 의 마지막 부분 으로 바 꿉 니 다.앞 은 뒤로 밀고,뒤 는 앞으로 밀고.
코드
public class _27RemoveElement{
	
	public int removeElement(int[] nums, int val){
		
		if(nums.length ==0) return 0;
		
		int i = 0;
		int j = nums.length-1;
		
		while(i!=j){
			if (nums[i]==val) {
			 	swap(nums,i,j);
			 	j--;
			}else{
				i++;
			}
		}
		
		if (nums[i]==val) {
			return i;
		}else{
			return i+1;
		}
}
		private void swap(int[] nums,int i,int j){
			int tmp = nums[i];
			nums[i] = nums[j];
			nums[j] = tmp;
			}

	public static void main(String[] arg){
		
		_27RemoveElement RemoveElement = new _27RemoveElement();
		
		int[] nums1 = {0,1,2,2,3,0,4,2};
		int value1 = 2;
		int[] nums2 = {2,2};
		int value2 = 2;
		
		System.out.println(RemoveElement.removeElement(nums1,value1));
		System.out.println(RemoveElement.removeElement(nums2,value2));	
	}
}

좋은 웹페이지 즐겨찾기