第十天
我使用的C++,错误的地方请见谅,文章初衷仅用来督促本人学习,如果恰巧能够给你带来帮助,我会十分开心。
一、283. 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
class Solution {
public:
void moveZeroes(vector& nums) {
//将非零元素直接向前覆盖
int n = nums.size();
int i = 0;
for (int j : nums){
if (j != 0){
nums[i] = j;
i++;
}
}
for (int k = i; k < n; k++){//补0
nums[k] = 0;
}
}
};
下面是双指针的方法
class Solution {
public:
void moveZeroes(vector<int>& nums) {
//双指针,左右指针交换元素
int n = nums.size(), low = 0, high = 0;
while (high < n){
if (nums[high] != 0){
swap(nums[low], nums[high]);
low++;
}
high++;
}
}
};
二、167. 两数之和 II - 输入有序数组
给定一个已按照 非递减顺序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。
函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。
你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
//两数之和有各种解法,这一种是用双指针
int n = numbers.size();
int low= 0, high = n - 1;
while (low < high){
if (numbers[low] + numbers[high] == target){
return {low + 1, high + 1};
}
else if (numbers[low] + numbers[high] < target){
low++;
}
else if (numbers[low] + numbers[high] > target){
high--;
}
}
return {-1, -1};
}
};
很多情况下,有序序列对于解题有很大的帮助,而C++中排序则很方便sort可直接实现非递减序列