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], ...
随机推荐
- Python04 range()方法的使用、turtle.textinput()方法和write()的使用、turtle.numinput()的使用
1 range() 方法的使用 1.1 range方法介绍 range方法会返回一个range类型的对象,该对象会根据range方法的参数产生一些列整型数据 技巧01:range方法有三个参数,第一个 ...
- Auto Control 001 自动控制的一般概念
自动控制的基本概念 一 . 自动控制系统的组成 自动控制装置:自动控制装置的组成当中涉及到了这样这样一些东西: 第1,需要有被控对象,那么这些被控对象需要有谁来控制呢?一定要有控制器,这些控制器,我们 ...
- CMake代码示例
CMake代码示例(注:此文只贴了部分示例代码,详细文章见最后参考文章): 1.为工程和可执行文件指定一个版本号. 虽然可以在源代码中唯一指定它,但是在CMakeLists文件中指定它可以提供更好的灵 ...
- Map-making Robots: A Review of the Occupancy Grid Map Algorithm
栅格地图算法:http://www.ikaros-project.org/articles/2008/gridmaps/
- MVC5应用程序生命周期lifecycle
- xen创建pvm和hvm的过程
these are the basic steps of installing domU with xen-tools in ubuntu13.04 64bit in xen4.3 you can a ...
- 编写高质量代码改善C#程序的157个建议——建议25:谨慎集合属性的可写操作
建议25:谨慎集合属性的可写操作 如果类型的属性中有集合属性,那么应该保证属性对象是由类型本身产生的.如果将属性设置为可写,则会增加抛出异常的几率.一般情况下,如果集合属性没有值,则它返回的Count ...
- wpf使用truetype字体ttf
查了半天都是语焉不详,这篇算是稍微详细点的:http://www.cnblogs.com/junhengml/p/6878933.html 要先查找到字体的字库名称,才能使用: <Window. ...
- [转]xe6 android 使用距离传感器(Proximiry)
The first step it's a run sample from RAD Studio that named SensorInfo on your device. On the tab Bi ...
- Java简单实现AOP,Java通用异常拦截,Java与Lamada
直接看代码不废话.不懂Lamada直接百度... package test; /** * QQ:1448376744 * @author 花间岛 * */ //控制器 public class Con ...