提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
注意这些实现方法并没有改变元素的相对位置!
一、力扣27. 移除元素
class Solution {
public int removeElement(int[] nums, int val) {
int res = 0, len = nums.length;
if(nums.length == 0){
return res;
}
for(int i = 0, j = 0; i < nums.length;){
if(nums[i] != val){
nums[j++] = nums[i++];
}else{
i ++;
res ++;
}
}
return len - res;
}
}
二、力扣26. 删除有序数组中的重复项
class Solution {
public int removeDuplicates(int[] nums) {
int count = 0, len = nums.length;
if(len == 1){
return len;
}
for(int i = 1,j = 1; i < len;){
if(nums[i] != nums[i-1]){
nums[j++] = nums[i++];
}else{
count ++;
i ++;
}
}
return len - count;
}
}
三、力扣283. 移动零
class Solution {
public void moveZeroes(int[] nums) {
int left = 0, right = 0;
while(right < nums.length){
if(nums[right] != 0){
nums[left ++] = nums[right ++];
}else{
right ++;
}
}
while(left < nums.length){
nums[left ++] = 0;
}
}
}
四、力扣844. 比较含退格的字符串
class Solution {
public boolean backspaceCompare(String s, String t) {
char[] cs = s.toCharArray();
char[] ct = t.toCharArray();
int si = 0, sj = -1, ti = 0, tj = -1;
while(si < cs.length){
if(cs[si] != '#'){
cs[++sj] = cs[si ++];
}else if(sj >= 0){
sj --;
si ++;
}else{
si ++;
}
}
while(ti < ct.length){
if(ct[ti] != '#'){
ct[++ tj] = ct[ti ++];
}else if(tj >= 0){
tj --;
ti ++;
}else{
ti ++;
}
}
while(sj >= 0 && tj >= 0){
if(cs[sj] != ct[tj]){
return false;
}
sj --;
tj --;
}
if(sj >= 0 || tj >= 0){
return false;
}
return true;
}
}