Two sum:

哈希表解法;

class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
//只有唯一的一个解,且nums里的数不能重复使用
//hash
unordered_map<int, int> index;
for(int i=; i<nums.size(); i++)
index[nums[i]] = i; for(int i=; i<nums.size(); i++){
int left = target - nums[i];
if(index.count(left) && index[left]!=i)
//能在index中找到另一个数与nums[i]相加为target
return {i, index[left]}; //返回索引
}
return {}; //找不到解,返回空vector
}
};

注意这两个元素不能是相同的。

解法一:二分查找法,逐一取数组中的值,然后second = target - numbers[i] , 用二分查找法求第二个值。

时间复杂度:O(nlongn)

class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
//二分查找
vector<int> result;
int n = numbers.size();
for(int i=; i<n;i++){
int second = target - numbers[i];
int l = i+, r = n-;
while(l<=r){
int mid = (l+r)/;
if(second < numbers[mid]){
//在左半部分
r = mid-;
}
else if(second > numbers[mid]){
//在右半部分
l = mid+;
}
else{
//返回索引,从1开始
result.push_back(i+);
result.push_back(mid+);
break;
}
}
if(result.size()==) break;
}
return result;
}
};

解法三:对撞指针

使用两个指针,若nums[i] + nums[j] > target 时,i++; 若nums[i] + nums[j] < target 时,j -- 。

时间复杂度:O(n)

class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
int n = numbers.size();
int l = , r = n-;
while(l<r){
if(numbers[l] + numbers[r] == target){
int res[] = {l+, r+};
return vector<int>(res, res+);
}
else if(numbers[l] + numbers[r] < target)
l++;
else
r--;
}
throw invalid_argument("The input has no solution.");
}
};
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
//只有唯一的一个解,且nums里的数不能重复使用
//hash
unordered_map<int, int> index;
for(int i=; i<nums.size(); i++)
index[nums[i]] = i; for(int i=; i<nums.size(); i++){
int left = target - nums[i];
if(index.count(left) && index[left]!=i)
//能在index中找到另一个数与nums[i]相加为target
return {i, index[left]}; //返回索引
}
return {}; //找不到解,返回空vector
}
};

Two sum's follow up :

//
// main.cpp
// Two sum 的follow up
// 在数组中找两个元素使它们的和大于9,返回元素对的个数
// sort + 双指针
// ans = ans + (j-i); 当前有j-i个元素对大于target
//
#include<bits/stdc++.h>
using namespace std;
int main() {
// insert code here...
vector<int> nums{,,,,,,};
int target = ;
sort(nums.begin(), nums.end());
int left = , right = nums.size()-;
int ans = ;
while(left < right){
if(nums[left] + nums[right] > target){
ans += (right - left);
right--;
}
else{
left++;
}
}
cout << "ans: "<<ans<<endl;;
return ;
}

对撞指针的另一个题目:

空串也认为是回文串。若 isalnum() == true,则为字母或数字;使用toupper()将其转换为大写。

#include <ctype.h>
class Solution {
public:
bool isPalindrome(string s) {
int l = , r = s.size()-;
while(l<r){
//跳过非字母和数字的字符
while(!isalnum(s[l]) && l<r)
l++;
while(!isalnum(s[r]) && l<r)
r--;
//将字母或数字都转化为大写来比较是否相同
if(toupper(s[l]) != toupper(s[r]))
return false;
l++;
r--;
}
return true;
}
};

344 Reverse String

还蛮简单的,用了对撞指针的思想,交换首尾对应指针所指的元素的值。

class Solution {
public:
string reverseString(string s) {
int l = , r = s.size()-;
int mid = (l+r)/;
for(int i=;i<=mid;i++){
swap(s[l], s[r]);
l++;
r--;
}
return s;
}
};

345

翻转元音字母:aeiouAEIOU

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 = , r = n-; while(l<r){
while(!is_vowel(s[l]) && l<r)
l++;
while(!is_vowel(s[r]) && l<r)
r--;
swap(s[l], s[r]);
l++;
r--;
}
return s;
}
};

11

class Solution {
public:
int maxArea(vector<int> &height) {
int m = ;
int i = , j = height.size() - ;
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;
}
};

167 Two Sum-Input array is sorted, 125 Valid Palindrome,344的更多相关文章

  1. 608. Two Sum - Input array is sorted【medium】

    Given an array of integers that is already sorted in ascending order, find two numbers such that the ...

  2. 【LEETCODE】38、167题,Two Sum II - Input array is sorted

    package y2019.Algorithm.array; /** * @ProjectName: cutter-point * @Package: y2019.Algorithm.array * ...

  3. 29. leetcode 167. Two Sum II - Input array is sorted

    167. Two Sum II - Input array is sorted Given an array of integers that is already sorted in ascendi ...

  4. Leetcode之二分法专题-167. 两数之和 II - 输入有序数组(Two Sum II - Input array is sorted)

    Leetcode之二分法专题-167. 两数之和 II - 输入有序数组(Two Sum II - Input array is sorted) 给定一个已按照升序排列 的有序数组,找到两个数使得它们 ...

  5. 167. Two Sum II - Input array is sorted【easy】

    167. Two Sum II - Input array is sorted[easy] Given an array of integers that is already sorted in a ...

  6. 167. Two Sum II - Input array is sorted - LeetCode

    Question 167. Two Sum II - Input array is sorted Solution 题目大意:和Two Sum一样,这里给出的数组是有序的 思路:target - nu ...

  7. 167. Two Sum II - Input array is sorted@python

    Given an array of integers that is already sorted in ascending order, find two numbers such that the ...

  8. 1 & 167. Two Sum I & II ( Input array is sorted )

    Input array is sorted: Use binary search or two pointers Unsorted: Use hash map, key = target - a[i] ...

  9. leetcode2 Two Sum II – Input array is sorted

    Two Sum II – Input array is sorted whowhoha@outlook.com Question: Similar to Question [1. Two Sum], ...

随机推荐

  1. SpringBoot17 FastJson配置、Druid配置

    1 FastJson配置 1.1 FastJson基础知识 点击前往 1.2 SpringBoot整合FastJson 点击前往 1.2.1 导入FastJson依赖 <!--fastjson- ...

  2. 453. Minimum Moves to Equal Array Elements 一次改2个数,变成统一的

    [抄题]: Given a non-empty integer array of size n, find the minimum number of moves required to make a ...

  3. Linux xclip命令

    一.简介 xclip命令建立了终端和剪切板之间通道,可以用于以命令的方式将终端输出或文件的内容保存到剪切板中,也可以用于将剪切板的内容输出到终端或文件中. 在 X 系统里面,从一个窗口复制一段文字到另 ...

  4. Qt工程文件Pro介绍(转)

    转载请注明:http://blog.163.com/hu_cuit/blog/static/122849143201127104232142/ 我也才开始学习QT的菜鸟.但是前几天有同学叫我给他讲一下 ...

  5. Instruments Tutorial for iOS: How To Debug Memory Leaks【转】

    If you're new here, you may want to subscribe to my RSS feed or follow me on Twitter. Thanks for vis ...

  6. python DDT读取excel测试数据

    转自:http://www.cnblogs.com/nuonuozhou/p/8645129.html ddt   结合单元测试一起用 ddt(data.driven.test):数据驱动测试 由外部 ...

  7. Oracle 写存储过程的一个模板还有一些基本的知识点

    我很少用Oracle,也算新手,不过其实入手没有那么难,下面只是一个基本知识,高手绕道,其实数据库基本是相同的,这里提供都是基本知识点 有一个Oracle溢出的问题,容易让新手怀疑到无所怀疑,其实就是 ...

  8. Sublime for MacOS 使用技巧

    1.创建软链接,使用命令直接打开sublime编辑器 ln -s "/Applications/Sublime Text.app/Contents/SharedSupport/bin/sub ...

  9. angular 基本依赖注入

    import { Injectable } from '@angular/core'; @Injectable() export class ProductServiceService { const ...

  10. 「BZOJ1000」A+B Problem

    写这个主要是为了凑\(BZOJ\)题解用的,不用在意.跳过即可 \(Code\) #include<bits/stdc++.h> using namespace std; int main ...