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. Java-Decimal

    import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; public c ...

  2. opennebula 一些问t题讨论

    ou_ian - June 8th, 2011 11:13 am非常想请教一下如何设置VM的ip为DHCP? 我们的VM都需要通过eth0 (通过公司的DHCP获得ip)来连接到公司的网络(Inter ...

  3. 虚拟机ubuntu18.04设置静态IP

    说明: 网关:192.168.8.2 待设置静态IP:192.168.8.25 1.编辑:vi /etc/netplan/01-network-manager-all.yaml 打开以后内容如下: # ...

  4. 在线破解PDF

    在线破解PDF密码的6个网站 有很多PDF文件只能查看却不能被编辑和打印,因为它们已被保护.你并不知道被保护的PDF文档的密码却又急着向上司交差,怎么办?让 Ap PDF Password Recov ...

  5. 列表推导式对比For循环执行效率

    我们在前面的学习中都知道,如果把1-10以内的元素追加到一个新的列表表中,如果使用for循环我们可以这么做: a = [] for i in range(1,11): a.append(i) prin ...

  6. DELPHI XE5 UP2 运行IOS 遇到 Wrapper init failed: (null)问题的解决办法

    一.问题表现: 在MAC OSX(10.9.2)上安装了比较新的XCODE5.1 和COMMAND LINE TOOLS 在DELPHI XE5 UP2上放了一个按钮,输出到MAC OSX上,出现: ...

  7. Map存储容量及内存占用测试

    Integer a = 1; long start = 0; long end = 0; // 先垃圾回收 System.gc(); start = Runtime.getRuntime().free ...

  8. Head First HTML与CSS、XHTML (中文版).(Elisabeth Freeman) PDF扫描版​

    面对那些晦涩的html书你不禁要问:“难道要成为专家之后才能读懂这些?”那么,你应该选择<head first html与css.xhtml(中文版)>真正来学习html.这本书对你来说, ...

  9. duilib入门简明教程 -- 响应按钮事件(4)

       上一个Hello World的教程里有一句代码是这样的:CControlUI *pWnd = new CButtonUI;     也就是说,其实那整块绿色背景区域都是按钮的区域.(这里简要介绍 ...

  10. Live 直播过程

    采集.处理.编码.封包.推流.传输.转码.分发.拉流.解码.播放,从推流到播放