leetcode·双指针
文章目录
- 双指针
- 704.二分查找
- 278.第一个错误的版本
- 35.搜索插入位置
- 977.有序数组的平方
- 189.旋转数组
- 283.移动零
- 344.反转字符串
- 876.链表的中间结点
- 19.删除链表的倒数第N个结点
- 392.判断子序列
- 15.三数之和
双指针
704.二分查找
示例 2:
输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1
class Solution {
public:int search(vector<int>& nums, int target) {int l = nums.size()-1;int low=0 , high= l ;while(low <= high){int mid = (low + high )/2 ;if(nums[mid] == target )return mid;else if(nums[mid] < target)low = mid +1;else if (nums[mid] > target)high = mid -1;};return -1;}
};
278.第一个错误的版本
示例 2:
输入: n = 1, bad = 1
输出: 1
// The API isBadVersion is defined for you.
// bool isBadVersion(int version);class Solution {
public:int firstBadVersion( int n) { long long int low = 1, high = n;long long int mid;while(low <= high){mid = (low + high )/2;if(isBadVersion(mid) == false)low = mid + 1;else {if(isBadVersion(mid-1) == false)return mid;else high = mid - 1;} }return mid;}
};
35.搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
示例 1:
输入: nums = [1,3,5,6], target = 5
输出: 2
示例 2:
输入: nums = [1,3,5,6], target = 2
输出: 1
示例 3:
输入: nums = [1,3,5,6], target = 7
输出: 4
示例 4:
输入: nums = [1,3,5,6], target = 0
输出: 0
示例 5:
输入: nums = [1], target = 0
输出: 0
提示:
1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums 为无重复元素的升序排列数组
-104 <= target <= 104
class Solution {
public:int searchInsert(vector<int>& nums, int target) {int low , high , mid;low = 1 ; high = nums.size()-1;if(nums[0] >= target) //小于等于第一个return 0;else if (nums[high] < target) // 大与最后一个return high+1;else{ //位于最大最小之间while(low <= high){mid = (low + high )/2;if(nums[mid] < target) // 中间值小于目标数low = mid + 1;else if(nums[mid] > target )//中间值大与目标数high = mid - 1;else return mid; }}return low;//这里要返回low,而不是返回mid,具体细节可以通过样例[1,2,4,6,7],3 手动模拟理解}
};
977.有序数组的平方
class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {int l = nums.size();int x[10005];for(int i = 0 ; i < l ; i ++ ){x[i] = nums[i]*nums[i];}sort(x, x+l );for(int i = 0 ; i < l ; i ++ ){nums[i] = x[i] ;}return nums;}
};
189.旋转数组
class Solution {public:void rotate(vector<int>& nums, int k) {int x[200005];int l = nums.size();k %= l;for(int i = 0 ; i < l-k ; i ++)x[i+k] = nums[i];for(int i = 0 ; i < k ; i ++)x[i] = nums[l-k+i];for(int i = 0 ; i < l ; i ++ )nums[i] = x[i];}
};
283.移动零
class Solution {
public:void moveZeroes(vector<int>& nums) {int zero = 0;int x = 0;for(int i = 0 ; i < nums.size() ; i ++){if(nums[i] == 0 )zero++;else{nums[x] = nums[i] ;x++;}}for(int i = x ; i < nums.size() ; i ++)nums[i] = 0;}
};
344.反转字符串
class Solution {public:void reverseString(vector<char>& s) {reverse(s.begin(), s.end());}
};
总结: 本来自己写了一堆还没有调通,看了一眼评论立马吐血(虽然是直接调用别人的库,但自己还是孤弱寡闻了)
876.链表的中间结点
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* middleNode(ListNode* head) {ListNode *x1,*x2;x1 = head; int i = 1;while(x1 != NULL){x1 = x1->next;i++;}i--;x1 = head;for(int j = 1 ; j <= i/2 ; j ++){x1 = x1->next;}return x1;}
};
19.删除链表的倒数第N个结点
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* removeNthFromEnd(ListNode* head, int n) {//笨办法:跑一遍算算总共有多少个节点,然后再跑一遍找到对应的待删除结点删除ListNode *x1;x1 = head;int a=0;while(x1 !=NULL){x1 = x1->next;a++;} //cout<<a;if(a>2){a -= n; if(a == 0 )head = head -> next;else {x1 = head;while(a >1 ){x1 = x1 ->next;a--;}x1->next = x1->next->next;}}else if (a == 2 ){if(n == 2)head = head->next;else head->next = NULL;}else head = NULL;return head;}
};
392.判断子序列
class Solution {public:bool isSubsequence(string s, string t) {int n = s.length(), m = t.length();int l = 0;int i = 0 , j = 0 ; //i指向s,j指向twhile(1){if(i == n){ //当s已经到最后一个元素的后一位,即s为t的子序列,truel = 1;break;}if(j == m) //当t已经到最后一个元素的后一位,即t已全部遍历完,falsebreak;if(s[i] == t[j]){ //指向s的元素和指向t的元素相同,同时向后移一位i++;j++;}else //不同时,t向后移一位j ++;}if(l == 1)return true;else return false;}
};
15.三数之和
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
leetcode·双指针相关推荐
- Leetcode—双指针
双指针篇 简单 验证回文串 leetcode直达 class Solution {public:bool isPalindrome(string s) {int left = 0;int right ...
- Leetcode双指针滑动窗口相关题目
滑动窗口 滑动窗口解决哪种问题? 滑动窗口解决给定两个字符串S和T,问你S中是否存在一个子串,包含T中的所有字符并且不含有其他字符. 窗口右指针向右移动,窗口增大,直到满足条件,这时候找到可行解. 窗 ...
- LeetCode——双指针
双指针 双指针主要用来遍历数组,两个指针指向不同的元素,从而协同完成任务. 目录 有序数组的 Two Sum 两数平方和 反转字符串中的元音字符 回文字符串 归并两个有序数组 判断链表是否存在环 最长 ...
- leetcode双指针合集
27. 移除元素 class Solution {public:int removeElement(vector<int>& nums, int val) {/**思路:使用快慢指 ...
- leetcode双指针(python与c++)
1.字符串的排列 思路:双指针+滑动窗口 python: class Solution:def checkInclusion(self, s1: str, s2: str) -> bool:di ...
- leetcode ---双指针+滑动窗体
一:Minimum Size Subarray Sum(最小长度子数组的和O(N)) 题目: Given an array of n positive integers and a positive ...
- leetcode+双指针求最大容积,思维。一左一右指针
点击打开链接 #include<iostream> #include<stdio.h> #include<stdlib.h> #include<string& ...
- 备战秋招 |《百面机器学习》算法+leetcode开班报名!
算法面试刷题班推荐: 以<百面机器学习>为教材 结合leetcode筛选刷题 秋招已经开始了!时间紧迫,也许别人已经得到offer了,你却还在不知所措?(文末重金招聘讲师) 六月份基本都是 ...
- 仅剩3天 | 带学《百面机器学习》葫芦书,算法+leetcode一应俱全
或许你只要比别人准备多一点,你就可以在群体中脱颖而出. 年后基本都是春招和社招的高峰期,但好岗位招聘人数和应聘人数简直堪比春运抢票. 你总在抱怨"为什么别人机会那么好,能抢到你想要的名额?& ...
- 【只推荐一位】文能写诗聊妹,武可搬砖coding~
今天给大家推荐一个双一流高校在读研究生--小詹,「一个文能写诗撩妹,武可搬砖coding」的程序猿- 可上九天揽月,可下五洋捉鳖!说点题外话,不知道各位看到这句话第一反应是什么? 估计不少人认为是可以 ...
最新文章
- QT自定义窗口插件在QT Creator的应用
- 异构网络垂直切换算法LTE/WIMAX切换
- [BRF+] 测试ruleset
- Git 和 Github 秘籍
- 教师新学年工作愿景_新学年的3个创新开源项目
- java—三大框架详解,其发展过程及掌握的Java技术慨括
- 使用ActiveReports for .net 进行报表开发(十)--交叉变换背景 (转)
- android自定义对话框_Android自定义提醒对话框
- LaTeX数学符号表
- GB7714-1987文后参考文献著录规则
- 用Python基础做的游戏角色管理系统
- 高效 Windows 工作环境 Java 开发环境搭建
- 办公软件 Excel考试面试题库和答案
- *TEST 7 for NOIP 玄学解题 (150/300)
- 在Linux系统中的安装cpolar内网穿透
- 清华大学出版社计算机绘谱,清华大学出版社-图书详情-《土木与建筑类CAD技能一级(二维计算机绘图)AutoCAD培训教程》...
- C#之windous界面应用编程
- 如果更好的做好MES系统运维
- centos7.6修改分辨率
- spring 组建及核心内容的简介(一)