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

刷题笔记 day6

力扣 57 和为s的两个整数

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {vector<int>  v;int i =0 , j = nums.size()-1;while(i < j){if(nums[i]+ nums[j] > target){--j;}else if(nums[i] + nums[j] < target){++i;}else{v.push_back(nums[i]);v.push_back(nums[j]);break;}}return v;}
};

 对于一个递增排序的数组,我们可以使用双指针;

定义指针 left 指向数组最左端元素 , 定义指针 right 指向数组最右端元素;

当 nums[left] + nums[right]  >  target 时,右移指针right;

当 nums[left] + nums[right]  < target 时,左移指针left;

当 nums[left] + nums[right]  ==  target 时,输出结果。

class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {vector<int>  v;int i =0 , j = nums.size()-1;while(i < j){if(nums[i]+ nums[j] > target){--j;}else if(nums[i] + nums[j] < target){++i;}else{v.push_back(nums[i]);v.push_back(nums[j]);break;}}return v;}
};

力扣 15 三数之和

 

思路:1. 先给数组排序(升序)

2.  固定 最右端的数 a;

3.  将数a左边的区间两端定义双指针 left 和 right , 求这三个数(a, nums[left],nums[right)之和是否等于0; 大于0 , 右移right ; 小于 0 ,左移 left.

由于输出结果中不能含有重复性元素,所以在算法过程中要去重。

1.  找到一种结果后 , left 和 right 要跳过 重复元素。

2.  使用完一次双指针后, 下一次固定的数不能重复。

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {//先排序sort(nums.begin(),nums.end());vector<vector<int>> v;int c = nums.size()-1;while( c>=2){if(nums[c] < 0) // 如果最大的数小于0,那么将不存在三个数之和为零的情况{return v;}int left = 0, right = c-1;while(left < right){if(nums[left]+nums[right]+nums[c] >0){--right;}else if(nums[left]+nums[right]+nums[c] <0){++left;}else{v.push_back({nums[left],nums[right],nums[c]});++left;while(left < right&& nums[left] == nums[left-1])  //left不能越界{++left;}--right;while(left < right && nums[right] == nums[right+1])//right不能越界{--right;}}}--c;while(c >= 2 && nums[c] == nums[c+1]) //c不能越界{--c;}}return v;}
};

 力扣  18 四数之和

 思路:

   这道题的解题方法和上一道题一样。

class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {sort(nums.begin(),nums.end());vector<vector<int>> v;int c = nums.size()-1;while(c>=3){int  b = c-1;while(b>=2){int left = 0 , right  = b-1;while(left < right){long long sum =(long long) nums[left] + nums[right] + nums[b] + nums[c];if(sum > target){--right;}else if(sum < target){++left;}else{v.push_back({nums[left],nums[right],nums[b],nums[c]});++left;while(left < right && nums[left] == nums[left-1]){++left;}--right;while(left < right && nums[right] == nums[right +1]){--right;}}}--b;while(b >=2 && nums[b] == nums[b+1]){--b;}}--c;while(c >=3 && nums[c] == nums[c+1]){--c;}}return v;}
};

http://www.lryc.cn/news/108285.html

相关文章:

  • Drools用户手册翻译——第四章 Drools规则引擎(十一)复杂事件处理(CEP)的属性更改设置和监听器
  • [数据分析与可视化] Python绘制数据地图4-MovingPandas入门指北
  • 基于SpringBoot+Vue的MOBA类游戏攻略分享平台设计与实现(源码+LW+部署文档等)
  • Linux sed 命令详解
  • 算法通关村——如何使用中序和后序来恢复一棵二叉树
  • TypeScript的基本类型
  • Docker实战-如何去访问Docker仓库?
  • 【力扣】722. 删除注释
  • 篇二:工厂方法模式:灵活创建对象
  • Python(六十二)字典元素的增、删、改操作
  • 从零学算法138
  • CTF PWN练习之返回地址覆盖
  • OpenCV中图像变换
  • wordpress发表文章时报错: rest_cannot_create,抱歉,您不能为此用户创建文章(已解决)
  • 数学建模学习(7):Matlab绘图
  • CSS中所有选择器详解
  • STM32 低功耗学习
  • HCIP--云计算题库 V5.0版本
  • 小白到运维工程师自学之路 第六十五集 (docker-compose)
  • 量子机器学习
  • WEB集群——tomcat
  • Vulnhub: blogger:1靶机
  • 老版MFC工程迁移到VC2019编译EXE太大的问题
  • Curve深陷安全事件,OKLink如何破局
  • 2023华数杯数学建模思路A题B题C题模型代码分析
  • el-table合并单元格
  • html5设置不缓存
  • kotlin 的函数参数
  • 谈谈 Kafka 的幂等性 Producer
  • Doris(三)-集群部署3个FE+3个BE