注意这两个元素不能是相同的。
解法一:二分查找法,逐一取数组中的值,然后second = target - numbers[i] , 用二分查找法求第二个值。
时间复杂度:O(nlongn)
class Solution {public: vector twoSum(vector & numbers, int target) { //二分查找 vector result; int n = numbers.size(); for(int i=0; i numbers[mid]){ //在右半部分 l = mid+1; } else{ //返回索引,从1开始 result.push_back(i+1); result.push_back(mid+1); break; } } if(result.size()==2) break; } return result; }};
解法三:对撞指针
使用两个指针,若nums[i] + nums[j] > target 时,i++; 若nums[i] + nums[j] < target 时,j -- 。
时间复杂度:O(n)
class Solution {public: vector twoSum(vector & numbers, int target) { int n = numbers.size(); int l = 0, r = n-1; while(l
(res, res+2); } else if(numbers[l] + numbers[r] < target) l++; else r--; } throw invalid_argument("The input has no solution."); }};
#include class Solution {public: bool isPalindrome(string s) { int l = 0, r = s.size()-1; while(l
class Solution {public: string reverseString(string s) { int l = 0, r = s.size()-1; int mid = (l+r)/2; for(int i=0;i<=mid;i++){ swap(s[l], s[r]); l++; r--; } return s; }};
class Solution {public: bool is_vowel(char c){ if((c=='a')||(c=='e')||(c=='i')||(c=='o')||(c=='u')||(c=='A')||(c=='E')||(c=='I')||(c=='O')||(c=='U')) return true; else return false; } string reverseVowels(string s) { int n = s.size(); int l = 0, r = n-1; while(l
class Solution {public:int maxArea(vector &height) { int m = 0; int i = 0, j = height.size() - 1; while (i < j) { //m = max(m, (j - i) * min(height[i], height[j])); //height[i] < height[j] ? i++ : j--; if(height[i] < height[j]){ m = max(m, (j - i) * height[i]); i++; } else{ m = max(m, (j - i) * height[j]); j--; } } return m;}};