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;
}