167 Two Sum-Input array is sorted, 125 Valid Palindrome,344
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的更多相关文章
- 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 ...
- 【LEETCODE】38、167题,Two Sum II - Input array is sorted
package y2019.Algorithm.array; /** * @ProjectName: cutter-point * @Package: y2019.Algorithm.array * ...
- 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 ...
- Leetcode之二分法专题-167. 两数之和 II - 输入有序数组(Two Sum II - Input array is sorted)
Leetcode之二分法专题-167. 两数之和 II - 输入有序数组(Two Sum II - Input array is sorted) 给定一个已按照升序排列 的有序数组,找到两个数使得它们 ...
- 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 ...
- 167. Two Sum II - Input array is sorted - LeetCode
Question 167. Two Sum II - Input array is sorted Solution 题目大意:和Two Sum一样,这里给出的数组是有序的 思路:target - nu ...
- 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 ...
- 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] ...
- 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], ...
随机推荐
- Java-Decimal
import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberFormat; public c ...
- opennebula 一些问t题讨论
ou_ian - June 8th, 2011 11:13 am非常想请教一下如何设置VM的ip为DHCP? 我们的VM都需要通过eth0 (通过公司的DHCP获得ip)来连接到公司的网络(Inter ...
- 虚拟机ubuntu18.04设置静态IP
说明: 网关:192.168.8.2 待设置静态IP:192.168.8.25 1.编辑:vi /etc/netplan/01-network-manager-all.yaml 打开以后内容如下: # ...
- 在线破解PDF
在线破解PDF密码的6个网站 有很多PDF文件只能查看却不能被编辑和打印,因为它们已被保护.你并不知道被保护的PDF文档的密码却又急着向上司交差,怎么办?让 Ap PDF Password Recov ...
- 列表推导式对比For循环执行效率
我们在前面的学习中都知道,如果把1-10以内的元素追加到一个新的列表表中,如果使用for循环我们可以这么做: a = [] for i in range(1,11): a.append(i) prin ...
- DELPHI XE5 UP2 运行IOS 遇到 Wrapper init failed: (null)问题的解决办法
一.问题表现: 在MAC OSX(10.9.2)上安装了比较新的XCODE5.1 和COMMAND LINE TOOLS 在DELPHI XE5 UP2上放了一个按钮,输出到MAC OSX上,出现: ...
- Map存储容量及内存占用测试
Integer a = 1; long start = 0; long end = 0; // 先垃圾回收 System.gc(); start = Runtime.getRuntime().free ...
- Head First HTML与CSS、XHTML (中文版).(Elisabeth Freeman) PDF扫描版
面对那些晦涩的html书你不禁要问:“难道要成为专家之后才能读懂这些?”那么,你应该选择<head first html与css.xhtml(中文版)>真正来学习html.这本书对你来说, ...
- duilib入门简明教程 -- 响应按钮事件(4)
上一个Hello World的教程里有一句代码是这样的:CControlUI *pWnd = new CButtonUI; 也就是说,其实那整块绿色背景区域都是按钮的区域.(这里简要介绍 ...
- Live 直播过程
采集.处理.编码.封包.推流.传输.转码.分发.拉流.解码.播放,从推流到播放