LeetCode283. 제로 운동과 LeetCode26. 삭제 중복 된 항목 분류 배열

면책 조항 :이 문서는 블로거 원본입니다, 추적 에 의해-SA의 CC 4.0 저작권 계약, 복제, 원본 소스 링크이 문을 첨부 해주세요.
이 링크 : https://blog.csdn.net/Miaoshuowen/article/details/102688881

283. 제로 움직이는
피사체 설명
제로 요소의 상대적인 순서를 유지하면서 배열 nums에게 주어, 모든 기록 기능, 어레이 0의 끝으로 이동.

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]

설명 :

1.必须在原数组上操作,不能拷贝额外的数组。
2.尽量减少操作次数。

사고 :
] 방법 1 이중 포인터 느린 포인터 0의 수 없으면, 0 난 = J 때 필요가 작동하는 원래의 위치로 설정되어
방전 위치 0의 부존재의 수, 나머지 : 방법 2 0 최대 위치,
방법 3 : 이중 포인터 이동 0 스위칭 돌아왔다.

코드 :

	public int[] moveZeroes1(int nums[]) {
		int j = 0;
		for (int i = 0; i < nums.length; i++) {
			if (nums[i] != 0) {
				nums[j] = nums[i];
				if (i != j) {
					nums[i] = 0;
				}
				j++;
			}
		}
		return nums;
	}

	public int[] moveZeroes2(int nums[]) {
		int j = 0;
		for (int i = 0; i < nums.length; i++) {
			if (nums[i] != 0) {
				nums[j] = nums[i];
				j++;
			}
		}
		for (int p = j; p < nums.length; p++) {
			nums[p] = 0;
		}
		return nums;
	}

	public int[] moveZeroes3(int nums[]) {
		int j = 0;
		for (int i = 0; i < nums.length; i++) {
			if (nums[i] != 0) {
				int emp = 0;
				emp = nums[i];
				nums[i] = nums[j];
				nums[j] = emp;
				j++;
			}
		}
		return nums;
	}

(26) 정렬 할 배열의 중복 항목을 삭제
제목 설명
정렬 된 배열을 감안할 때, 각 요소가 제거 된 배열의 새 길이를 반환 한 후, 한 번만 나타나도록, 장소에 반복되는 요소를 제거해야합니다.

배열을위한 여분의 공간을 사용하지 마십시오, 당신은 장소에 입력 배열을 수정하고 사용 O (1) 여분의 공간의 조건을 완료해야합니다.

示例 1:

给定数组 nums = [1,1,2], 

기능 (2)의 새로운 길이를 반환해야하고 원래 배열의 첫 번째 두 요소 nums 1, 2로 변경된다.

당신은 뒤에 새로운 배열 길이의 요소를 넘어 고려해야 할 필요가 없습니다.

示例 2:

给定 nums = [0,0,1,1,1,2,2,3,3,4],

새로운 기능은 길이 (5)를 반환한다 원래 배열 nums 처음 5 개 요소는 0, 1, 2, 3, 4로 변경된다.

당신은 뒤에 새로운 배열 길이의 요소를 넘어 고려해야 할 필요가 없습니다.

설명 :

왜 반환 값은 정수이지만, 대답은 출력 그것의 배열입니다?

입력 어레이 입력 배열 함수 내의 발신자에게 표시 수정 수단 "기준"모드로 전달 있습니다.

你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝
int len = removeDuplicates(nums);

// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。
for (int i = 0; i < len; i++) {
    print(nums[i]);
}

아이디어 :
이동 제로 마찬가지로, 포인터의 개수를 통하여 아래로 포인터를 통과 할 새로운 포인터를 기다리고, 그 배열을 통해, 다른 포인터를 정의하는 새로운 포인터를 새로운 포인터가 업데이트되어,이 경우의 수와 일치하지 않는다.

	public int removeDuplicates(int[] nums) {
		if (nums.length == 0) {
			return 0;
		}
		int i = 0;
		for (int j = 1; j < nums.length; j++) {
			if (nums[j] != nums[i]) {
				i++;
				nums[i] = nums[j];
			}
		}
		return i + 1;
	}

추천

출처blog.csdn.net/Miaoshuowen/article/details/102688881