题目描述
题目1(283. 移动零)
![在这里插入图片描述 在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/7f0da18986e943a581ea7de80b753e07.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU5ODY4Nw==,size_16,color_FFFFFF,t_70&x-oss-process=image/resize,w_1400/format,webp)
题目2(167. 两数之和 II - 输入有序数组)
![在这里插入图片描述 在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/eddf4515943249d09935642af8dd178d.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU5ODY4Nw==,size_16,color_FFFFFF,t_70&x-oss-process=image/resize,w_1400/format,webp)
解题思路
题目1(283. 移动零)
- 使用一个游标index记录当前非0元素的个数;
- 遍历数组,若nums[i]不为0,则将其移动至index处,再++index;
- 遍历结束后,将nums[index ~ nums.length - 1]全部设为0,即可。
题目2(167. 两数之和 II - 输入有序数组)
- 定义两个整型指针left = 0,right = numbers.length - 1,分别指向数组的头和尾;
- 比较numbers[left] + numbers[right]和目标值target的大小。
(1)若numbers[left] + numbers[right] == target,记录left,right的值,并返回{left+1,right+1};
(2)若numbers[left] + numbers[right] < target,left指针右移,right指针不动;
(3)若numbers[left] + numbers[right] > target,left指针不动,right指针左移;
代码实现
题目1(283. 移动零)
class Solution {
public void moveZeroes(int[] nums) {
int index = 0;
for(int i=0;i<nums.length;i++){
if(nums[i] != 0){
nums[index] = nums[i];
++index;
}
}
for(int i = index;i<nums.length;i++){
nums[i] = 0;
}
}
}
题目2(167. 两数之和 II - 输入有序数组)
class Solution {
public int[] twoSum(int[] numbers, int target) {
int left = 0, right = numbers.length - 1;
int[] res = new int[2];
while(left < right){
if(numbers[left] + numbers[right] == target){
res[0] = left + 1;
res[1] = right + 1;
return res;
}else if(numbers[left] + numbers[right] < target){
++left;
}else{
--right;
}
}
return null;
}
}