一、
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[2,7] 或者 [7,2]
示例 2:
输入:nums = [10,26,30,31,47,60], target = 40
输出:[10,30] 或者 [30,10]
思路:利用数组排好序的特性。x,y分别指向数组的两端。
当nums[x] + nums[y] == target时,有解{nums[x] ,nums[y]}。
当nums[x] + nums[y] > target时,y–。这样能使两者之和减小。
当nums[x] + nums[y] < target时,x++。这样能使两者之和增大。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int left=0,right=nums.size()-1;
while(left<right){
int s=nums[left]+nums[right];
if(s==target){
return vector<int>{
nums[left],nums[right]};
}else if(s>target)
{
--right;
}else{
left++;
}
}
return vector<int>{
-1,-1};
}
};
二、
- 反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
示例 1:
输入:[“h”,“e”,“l”,“l”,“o”]
输出:[“o”,“l”,“l”,“e”,“h”]
示例 2:
输入:[“H”,“a”,“n”,“n”,“a”,“h”]
输出:[“h”,“a”,“n”,“n”,“a”,“H”]
class Solution {
public:
void reverseString(vector<char>& s) {
//reverse