算法-移除元素
下面的算法是跟着【代码随想录】学习的,数据结构是数据,算法是移除元素,这些是我的解法,如果有什么想法,欢迎大家留言与我讨论,谢谢。
1,LeetCode27
给你一个数组 nums
和一个值 val
,你需要 原地 移除所有数值等于 val
的元素。元素的顺序可能发生改变。然后返回 nums
中与 val
不同的元素的数量。
假设 nums
中不等于 val
的元素数量为 k
,要通过此题,您需要执行以下操作:更改 nums
数组,使 nums
的前 k
个元素包含不等于 val
的元素。nums
的其余元素和 nums
的大小并不重要。返回 k
。
ini
class Solution {
public int removeElement(int[] nums, int val) {
int count = 0;
for(int i = 0;i < nums.length;i++){
if(nums[i] != val){
nums[count++] = nums[i];
}
}
return count;
}
}
1234567891011
2,LeetCode26
给你一个 非严格递增排列 的数组 nums
,请你**原地** 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums
中唯一元素的个数。
考虑 nums
的唯一元素的数量为 k
,你需要做以下事情确保你的题解可以被通过:
- 更改数组
nums
,使nums
的前k
个元素包含唯一元素,并按照它们最初在nums
中出现的顺序排列。nums
的其余元素与nums
的大小不重要。 - 返回
k
ini
class Solution {
public int removeDuplicates(int[] nums) {
int count = 0;
for(int i = 0;i < nums.length;i++){
if(nums[i] != nums[count]){
nums[++count] = nums[i];
}
}
return ++count;
}
}
1234567891011
3,LeetCode283
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
ini
class Solution {
public void moveZeroes(int[] nums) {
int count = 0;
for(int i = 0;i < nums.length;i++){
if(nums[i] != 0){
nums[count++] = nums[i];
}
}
for(int i = count;i < nums.length;i++){
nums[i] = 0;
}
}
}
12345678910111213
4,LeetCode844
给定 s
和 t
两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true
。#
代表退格字符。
**注意:**如果对空文本输入退格字符,文本继续为空。
scss
class Solution {
public boolean backspaceCompare(String s, String t) {
String res1 = back(s);
String res2 = back(t);
return res1.equals(res2);
}
public static String back(String str){
StringBuilder result = new StringBuilder();
for(int i = 0;i < str.length();i++){
char c = str.charAt(i);
if(c == '#'){
if(result.length() > 0){
result.deleteCharAt(result.length() - 1);
}
}else {
result.append(c);
}
}
return result.toString();
}
}
123456789101112131415161718192021
5,LeetCode977
给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
ini
class Solution {
public int[] sortedSquares(int[] nums) {
int[] result = new int[nums.length];
int left = 0;
int right = nums.length - 1;
int index = nums.length -1;
while(left <= right){
if(Math.abs(nums[left]) >= Math.abs(nums[right])){
result[index--] = nums[left] * nums[left];
left++;
}else {
result[index--] = nums[right] * nums[right];
right--;
}
}
return result;
}
}