当前位置: 首页 > news >正文

LeetCode hot100---双指针专题(C++语言)

双指针

(1)快慢双指针

适用于使用双指针进行元素移动,覆盖

(2)首尾双指针

计算区域面积,三数之和

1、移动0

(1)题目描述以及输入输出

(1)题目描述:
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
(2)输入输出描述:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]关键思路:
fast遍历数组,slow用于指向零。遍历时,不为0元素时,slow与fast进行swap(),都会向右移动;0时,仅fast移动。

(2)代码块

class Solution {
public:void moveZeroes(vector<int>& nums) {int slow = 0;int fast = 0;for(fast = 0;fast<nums.size();++fast){if(nums[fast] != 0)swap(nums[slow++],nums[fast]);}}
};

2、盛水最多的容器

(1)题目描述以及输入输出

(1)题目描述:
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
(2)输入输出描述:
输入:height = [1,1]
输出:1关键思路:
首尾双指针while遍历数组,计算区域面积:(right-left)*min(height[left],height[right])
接着偏移左右双指针,height[left]<height[right],left++,找高边缘。

(2)代码块

class Solution {
public:int maxArea(vector<int>& height) {int left = 0;int right = height.size()-1;int result = 0;while(left<right){if(height[left] < height[right]){result = max((right-left)*height[left],result);left++;}else{result = max((right-left)*height[right],result);right--;}}return result;}
};

3、三数之和

(1)题目描述以及输入输出

(1)题目描述:
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。
(2)输入输出描述:
输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]关键思路:
遍历数组元素,遍历到该元素时先对元素进行去重,使用首尾双指针while计算三者相加的和,再进行首尾指针移动;
找到和为0的三元素后,插入结果,并对接下来的首尾指针进行去重,去重后指针均向中间移动。

(2)代码块

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {sort(nums.begin(),nums.end());vector<vector<int>> result;int left,right;for(int i  = 0;i<nums.size();++i){if(nums[i] > 0)return result;if((i >= 1) && (nums[i] == nums[i-1]))continue;  // 首去重left = i+1;right = nums.size()-1;while(left<right){if(nums[i] + nums[left] + nums[right] > 0)right--;else if(nums[i] + nums[left] + nums[right] < 0)left++;else{result.push_back(vector<int>{nums[i],nums[left],nums[right]});while(left<right && nums[left] == nums[left+1])left++;while(left<right && nums[right] == nums[right-1])right--;left++;right--;}}}return result;    }
};

http://www.mrgr.cn/news/44773.html

相关文章:

  • 笔记整理—linux进程部分(8)线程与进程
  • 知识图谱入门——11:构建动态图谱渲染应用:Vue3与Neo4j的集成与实践
  • 【GitHub】上传文件到GitHub
  • 接口怎么返回文件或数据流,@RequestMapping注解里面的属性项有哪些
  • 基于Python的自然语言处理系列(26):Get to the Point Summarization
  • 仿生学习:智能系统设计的灵感与实现
  • 国外媒体宣发:怎么在海外电子杂志版上发布新闻稿-时代周刊Time发布新闻稿
  • Nginx07-静态资源访问
  • Revisiting Graph-Based Fraud Detection in Sight of Heterophily and Spectrum
  • stm32开发环境的配置
  • pytorch导入数据集
  • 操作系统 | 学习笔记 | 王道 | 4.3 文件系统
  • 解决ERR_PROXY_CONNECTION_FAILED
  • 网络编程面试题
  • 哈希表_存在重复元素|、存在重复元素||_C++
  • C++游戏开发:探索与挑战
  • Java中的标识符和关键字
  • 小红书引流的4大方法
  • 【Codeforces】CF 2014 G
  • 感知机学习算法