// class Solution {
// public int removeElement(int[] nums, int val) {
// Arrays.sort(nums);
// int slow = 0;
// int fast = 1;
// int len = nums.length;
// for (; fast < len; fast++) {
// if (nums[fast] == val) {
// while (fast < len - 1 && nums[fast + 1] = val) {
// fast++;
// } else {
// nums[slow + 1] = nums[fast];
// slow++;
// }
// }
// }
// return slow;
// }
// }
class Solution {
public int removeElement(int[] nums, int val) {
int len = nums.length;
int slow = 0;
int fast = 0;
while (fast < len) {
if (nums[fast] != val) {
nums[slow] = nums[fast];
slow++;
fast++;
} else {
fast++;
}
}
return slow;
}
}
//双指针的快慢指针出现。
//删除重复元素的题目。
//一个指针将数组循环,另一个指针指向我们最终需求的数组位置。
// class Solution {
// public int removeDuplicates(int[] nums) {
// int len = nums.length;
// int slow = 0;
// int fast = 0;
// while (fast < len) {
// //slow就代表着我们要对比的元素
// if (nums[fast] != nums[slow]) {
// nums[slow + 1] = nums[fast];
// slow++;
// }
// fast++;
// }
// //最后返回的是个数。数组中的下标加1才是个数。
// return slow + 1;
// }
// }
class Solution {
public int removeDuplicates(int[] nums) {
int len = nums.length;
int slow = 0;
int fast = 0;
int temp = Integer.MIN_VALUE;
while (fast < len) {
if (nums[fast] == temp) {
fast++;
} else {
nums[slow] = nums[fast];
//用到下次对比的值要保留起来
//知道已经会了,但是我怕以后忘了,先写出来。
temp = nums[fast];
fast++;
slow++;
}
}
return slow;
}
}
class Solution {
public void moveZeroes(int[] nums) {
int slow = 0;
int fast = 0;
int len = nums.length;
while (fast < len) {
if (nums[fast] == 0) {
fast++;
} else {
nums[slow] = nums[fast];
slow++;
fast++;
}
}
for (int i = len- 1; i >= slow ; i--) {
nums[i] = 0;
}
}
}
class Solution {
public int[] sortedSquares(int[] nums) {
for (int i = 0; i < nums.length; i++) {
nums[i] = Math.abs(nums[i]);
}
// for (int x : nums) {
// x = Math.abs(x);
// }
Arrays.sort(nums);
for (int i = 0; i < nums.length; i++) {
nums[i] = nums[i] * nums[i];
}
//这么写错了
// for (int x : nums) {
// x = x * x;
// }
return nums;
}
}
//这个就是利用了,一个数组中的数值经过变换放到一个新的数组中
class Solution {
public int[] sortedSquares(int[] nums) {
int len = nums.length;
int[] res = new int[len];
int i = 0;
j = len - 1;
pos = len - 1;
while (i <= j) {
if (nums[i] * nums[i] > nums[j] * nums[j]) {
ans[pos] = nums[i] * nums[i];
i++;
} else {
ans[pos] = nums[j] * nums[j];
j--;
}
pos--;
}
return res;
}
}
class Solution {
public String replaceSpace(String s) {
int sLen = s.length();
int count = 0;
for (int i = 0; i < sLen; i++) {
if (s.charAt(i) == ' ') count++;
}
char[] chArray = new char[sLen + 2 * count];
//一个数组中的数值经过变换放到一个新的数组中
//长度不一样时候得赋值写法
int i = 0;
int j = 0;
while (i < chArray.length) {
char ch = s.charAt(j);
if (ch == ' ') {
chArray[i++] = '%';
chArray[i++] = '2';
chArray[i++] = '0';
} else {
chArray[i++] = ch;
}
j++;
}
return new String(chArray);
}
}
class Solution {
public String reverseWords(String s) {
int left = 0, right = s.length() - 1;
// 去掉字符串开头的空白字符
while (left <= right && s.charAt(left) == ' ') {
++left;
}
// 去掉字符串末尾的空白字符
while (left <= right && s.charAt(right) == ' ') {
--right;
}
Deque<String> d = new ArrayDeque<String>();
StringBuilder word = new StringBuilder();
while (left <= right) {
char c = s.charAt(left);
if ((word.length() != 0) && (c == ' ')) {
// 将单词 push 到队列的头部
d.offerFirst(word.toString());
word.setLength(0);
} else if (c != ' ') {
word.append(c);
}
++left;
}
d.offerFirst(word.toString());
return String.join(" ", d);
}
}