题目描述
题目1(283. 移动零)
题目2(167. 两数之和 II - 输入有序数组)
解题思路
题目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;
}
}