【题目1】
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素
class Solution {
public int removeElement(int[] nums, int val) {
if(nums.length ==0)
return 0;
int sign = 0;
for(int i=0;i<nums.length;i++){
if(nums[i] != val){ //需要保留的
nums[sign++] = nums[i];
}
}
return sign;
}
}
【题目2】
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。将最终结果插入 nums 的前 k 个位置后返回 k 。不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成
思路:与上面略微不同,这个得按照先保留,所以要前++sign
class Solution {
public int removeDuplicates(int[] nums) {
if(nums.length == 0)
return 0;
int sign = 0;
for(int i=0;i<nums.length;i++){
if(nums[i] != nums[sign]){
nums[++sign] = nums[i];
}
}
return sign+1;
}
}
【题目3】
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。
思路:改成交换而已
class Solution {
public void moveZeroes(int[] nums) {
if(nums.length == 0)
return ;
int sign = 0;
int temp;
for(int i=0;i<nums.length;i++){
if(nums[i] != 0){ //找到第一个不是0元素交换
temp = nums[i];
nums[i] = nums[sign];
nums[sign] = temp;
sign++;
}
}
}
}
【题目4】
给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。
思路:StringBuilder比char[] 好用 用栈得思想 和括号匹配类似
class Solution {
public boolean backspaceCompare(String S, String T) {
return build(S).equals(build(T));
}
public String build(String str) {
StringBuffer ret = new StringBuffer();
int length = str.length();
for (int i = 0; i < length; ++i) {
char ch = str.charAt(i);
if (ch != '#') {
ret.append(ch);
} else {
if (ret.length() > 0) {
ret.deleteCharAt(ret.length() - 1);
}
}
}
return ret.toString();
}
}
【题目5】
给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序
思路:平方后直接排序
class Solution {
public int[] sortedSquares(int[] nums) {
for(int i = 0;i<nums.length;i++){
nums[i] = nums[i] * nums[i];
}
for(int i = 0; i<nums.length;i++){
for(int j = 0;j<nums.length -i -1;j++){
if(nums[j] > nums[j+1]){
int temp = nums[j+1];
nums[j+1] = nums[j];
nums[j] = temp;
}
}
}
return nums;
}
}