《LeetCode力扣练习》代码随想录——数组(移除元素—Java)
刷题思路来源于 代码随想录
27. 移除元素
-
快慢指针
class Solution { public int removeElement(int[] nums, int val) { if(nums.length==0){ return 0; } int slow=0; for(int fast=0;fast<nums.length;fast++){ if(nums[fast]!=val){ nums[slow++]=nums[fast]; } } return slow; } }
-
相向双指针
class Solution { public int removeElement(int[] nums, int val) { if(nums.length==0){ return 0; } int left=0; int right=nums.length-1; while(right>=0&&nums[right]==val){ right--; } while(left<=right){ if(nums[left]==val){ nums[left]=nums[right]; right--; while(right>=0&&nums[right]==val){ right--; } } left++; } return left; } }
26. 删除有序数组中的重复项
-
快慢指针
class Solution { public int removeDuplicates(int[] nums) { if(nums.length==1){ return 1; } int slow=0; int target=-10001; for(int fast=0;fast<nums.length;fast++){ if(nums[fast]!=target){ nums[slow++]=nums[fast]; target=nums[fast]; } } return slow; } }
283. 移动零
-
快慢指针
class Solution { public void moveZeroes(int[] nums) { if(nums.length==1){ return; } int slow=0; for(int fast=0;fast<nums.length;fast++){ if(nums[fast]!=0){ int temp=nums[fast]; nums[fast]=0; nums[slow++]=temp; } } } }
844. 比较含退格的字符串
-
从后向前双指针
class Solution { public boolean backspaceCompare(String s, String t) { int sBack=0; int tBack=0; int sFast=s.length()-1; int tFast=t.length()-1; while(true){ while(sFast>=0){ if(s.charAt(sFast)=='#'){ sBack++; }else if(sBack>0){ sBack--; }else{ break; } sFast--; } while(tFast>=0){ if(t.charAt(tFast)=='#'){ tBack++; }else if(tBack>0){ tBack--; }else{ break; } tFast--; } if(sFast<0||tFast<0){ break; } if(s.charAt(sFast)!=t.charAt(tFast)){ return false; } sFast--; tFast--; } if(sFast==-1&&tFast==-1){ return true; } return false; } }
977. 有序数组的平方
-
双指针
class Solution { public int[] sortedSquares(int[] nums) { int[] result=new int[nums.length]; if(nums.length==1){ result[0]=nums[0]*nums[0]; return result; } int k=nums.length-1; for(int slow=0,fast=nums.length-1;slow<=fast;){ int left=nums[slow]*nums[slow]; int right=nums[fast]*nums[fast]; if(left<right){ result[k--]=right; fast--; }else{ result[k--]=left; slow++; } } return result; } }