例题. 26 删除数组中的重复项 Easy
练习1. 80 删除数组中的重复项,使得每个元素最多出现两次 Medium
练习2. 27 删除等于val的元素 Easy
练习3. 283 把数组中所有的0元素移动到数组末尾 Easy
一、26 删除排序数组中的重复项
【题目】
【代码】
class Solution {
public int removeDuplicates(int[] nums) {
int len = nums.length;
if(len == 0) return 0;
int i = 0;
for(int j=1; j<len;){
if(nums[j] ==nums[i]){ //相等则看下一个
j++;
}else{ //不相等,则把a[j]放到i的下一个位置
i++;
nums[i] = nums[j];
j++;
}
}
return i+1;
}
}
二、80 删除排序数组中的重复项,使得每个元素最多出现两次
【题目】
【分析】
【代码】
class Solution {
public int removeDuplicates(int[] nums) {
int len = nums.length;
if(len <= 2) return len;
int i=2; //i位置用来保存元素
for(int j=2; j<len; j++){
if(nums[j] != nums[i-2]){
nums[i++] = nums[j];
}
}
return i;
}
}
练习2. 27 删除等于val的元素
【题目】
【分析:思路一】
核心思想为:
if(a[j]==val){
j++; //看下一个元素
}else{
a[i]=a[j]; //放到i的位置
i++; //用于存放下个不为val的元素
j++; //看下一个元素
}
代码:
class Solution {
public int removeElement(int[] nums, int val) {
int len = nums.length;
if(len == 0) return 0;
int i=0;
for(int j=0;j<len;){
if(nums[j] == val){
j++;
}else{
nums[i] = nums[j];
i++;
j++;
}
}
return i;
}
}
结果:
【分析:思路二】
核心思想:找到不为val的元素,拿到前面。
代码:
class Solution {
public int removeElement(int[] nums, int val) {
int len = nums.length;
if(len == 0) return 0;
int i=0;
for(int j=0;j<len;j++){
if(nums[j] != val){
nums[i++] = nums[j];
}
}
return i;
}
}
结果:
练习3. 283 把数组中所有的0元素移动到数组末尾
【题目】
【分析】
27题目是删除所有值等于val的元素。也就是使所有非val的元素都在前面。
而这个题是把所有非0元素放到前面,无非就是令27的val等于0。
【代码】
class Solution {
public void moveZeroes(int[] nums) {
int len = nums.length;
if(len <= 1) return;
int i=0; //i存放元素
for(int j=0; j<len; j++){ //首先把非0元素移动到前面
if(nums[j] !=0){
nums[i++] = nums[j];
}
}
for(;i<len;i++){ //然后把最后的元素置零
nums[i]=0;
}
}
}
结果: