283. Move Zeroes
Given an integer array nums, move all 0's to the end of it while maintaining the relative order of the non-zero elements.
Note that you must do this in-place without making a copy of the array.
Example 1:
Input: nums = [0,1,0,3,12]
Output: [1,3,12,0,0]
Example 2:
Input: nums = [0]
Output: [0]
Constraints:
- 1 <= nums.length <= 104
- -231 <= nums[i] <= 231 - 1
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];
}
}
for(int i=index; i<nums.length; i++){
nums[i] = 0;
}
}
}
167. Two Sum II - Input Array Is Sorted
Given a 1-indexed array of integers numbers that is already sorted in non-decreasing order, find two numbers such that they add up to a specific target number. Let these two numbers be numbers[index1] and numbers[index2] where 1 <= index1 < index2 <= numbers.length.
Return the indices of the two numbers, index1 and index2, added by one as an integer array [index1, index2] of length 2.
The tests are generated such that there is exactly one solution. You may notuse the same element twice.
Your solution must use only constant extra space.
Example 1:
Input: numbers = [2,7,11,15], target = 9
Output: [1,2]
Explanation: The sum of 2 and 7 is 9. Therefore, index1 = 1, index2 = 2. We return [1, 2].
Example 2:
Input: numbers = [2,3,4], target = 6
Output: [1,3]
Explanation: The sum of 2 and 4 is 6. Therefore index1 = 1, index2 = 3. We return [1, 3].
Example 3:
Input: numbers = [-1,0], target = -1
Output: [1,2]
Explanation: The sum of -1 and 0 is -1. Therefore index1 = 1, index2 = 2. We return [1, 2].
Constraints:
- 2 <= numbers.length <= 3 * 104
- -1000 <= numbers[i] <= 1000
- numbers is sorted in non-decreasing order.
- -1000 <= target <= 1000
- The tests are generated such that there is exactly one solution.
class Solution {
public int[] twoSum(int[] numbers, int target) {
int left=0,right=numbers.length-1;
while(left<right){
int sum=numbers[left]+numbers[right];
if(sum==target){
return new int[]{left+1,right+1};
}
else if(sum>target){
right--;
}
else if(sum<target){
left++;
}
}
return new int[]{};
}
}
1 3 4 5 7 11
L R sum = 1+11=12 > 9, so R--.
If we increase L, we will get 3+11 which is much greater than target(9) so that would be wrong.
Hence, we have to go backwards, i.e. R--, to decrease sum.
1 3 4 5 7 11
L R sum=1+7=8 < 9, so L++. (Because we need to increase sum)
1 3 4 5 7 11
L R sum=3+7=10 > 9, R--.
1 3 4 5 7 11
L R sum=3+5=8 < 9, L++.
1 3 4 5 7 11
L R sum=4+5=9 == 9, Return.
'Algorithm > LeetCode' 카테고리의 다른 글
[LeetCode] Algorithm I - Day 4 Two Pointers (0) | 2022.10.28 |
---|---|
[LeetCode] Algorithm I - Day 2 Two Pointers (0) | 2022.10.26 |
[LeetCode] Algorithm I - Day 1 Binary Search (0) | 2022.10.26 |
[LeetCode] 371. Sum of Two Integers (두 숫자의 합) (1) | 2022.05.24 |
[LeetCode] 35. Search Insert Position (0) | 2022.04.20 |