【优选算法题练习】day3

news2024/11/15 10:07:50

文章目录

  • 一、15. 三数之和
    • 1.题目简介
    • 2.解题思路
    • 3.代码
    • 4.运行结果
  • 二、18. 四数之和
    • 1.题目简介
    • 2.解题思路
    • 3.代码
    • 4.运行结果
  • 三、209. 长度最小的子数组
    • 1.题目简介
    • 2.解题思路
    • 3.代码
    • 4.运行结果
  • 总结


一、15. 三数之和

1.题目简介

15. 三数之和
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。
在这里插入图片描述
在这里插入图片描述

2.解题思路

3.代码

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>> ret;
        //1.排序
        sort(nums.begin(), nums.end(), [](int& x, int& y){return x < y;});
        //2.先确定三个数中最小的那个数a,然后用双指针法去查找另外两个数b和c,使b + c = -a;
        for(int i = 0;i < nums.size() - 2; ++i)
        {

            if(i > 0 && nums[i] == nums[i - 1]) continue;
            int left = i + 1, right = nums.size() - 1;
            while(left < right)
            {
                int sum = nums[left] + nums[right];
                if(sum < -nums[i])
                {
                    left++;
                    while(left < right && nums[left] == nums[left - 1]) left++;//用while是因为可能有很多重复的数字,要去重
                }
                else if(sum > -nums[i])
                {
                    right--;
                    while(left < right && nums[right] == nums[right + 1]) right--;
                }
                else
                {

                    ret.push_back({nums[i], nums[left], nums[right]});
                    left++;
                    while(left < right && nums[left] == nums[left - 1]) left++;
                    right--;
                    while(left < right && nums[right] == nums[right + 1]) right--;
                }
            }
        }
        return ret;
    }
};

4.运行结果

在这里插入图片描述

二、18. 四数之和

1.题目简介

18. 四数之和
给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):
0 <= a, b, c, d < n(a、b、c 和 d 互不相同)
nums[a] + nums[b] + nums[c] + nums[d] == target
你可以按 任意顺序 返回答案 。
在这里插入图片描述

2.解题思路

3.代码

class Solution {
public:
    vector<vector<int>> fourSum(vector<int>& nums, int target) {
        vector<vector<int>> ret;
        //1.排序
        sort(nums.begin(), nums.end(), [](int& x, int& y){return x < y;});
        //2.两层for循环分别确定两个元素(一个最大一个最小),再用指针法确定剩下的两个元素
        for(int i = 0;i < nums.size(); ++i)
        {
            if(i > 0 && nums[i] == nums[i - 1]) continue;
            for(int j = nums.size() - 1;j >= 0; --j)
            {
                if(j <nums.size() - 1 && nums[j] == nums[j + 1]) continue;
                long long sum1 = nums[i] + nums[j];
                int left = i + 1, right = j - 1;
                while(left < right)
                {
                    long long sum2 = nums[left] + nums[right];
                    if(sum2 < (target-sum1))
                    {
                        left++;
                        while(left < right && nums[left] == nums[left - 1]) left++;
                    }
                    else if(sum2 > (target-sum1))
                    {
                        right--;
                        while(left < right && nums[right] == nums[right + 1]) right--;
                    }
                    else
                    {
                        ret.push_back({nums[i], nums[j], nums[left], nums[right]});
                        left++;
                        while(left < right && nums[left] == nums[left - 1]) left++;
                        right--;
                        while(left < right && nums[right] == nums[right + 1]) right--;
                    }
                }
            }
        }
        return ret;
    }
};

4.运行结果

在这里插入图片描述

三、209. 长度最小的子数组

1.题目简介

209. 长度最小的子数组
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
在这里插入图片描述

2.解题思路

3.代码

//左闭右开,滑动窗口
class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int ret = INT_MAX, left = 0, right = 0, sum = 0;//left左边界,right右边界
        while(right <= nums.size())
        {
            //如果元素和小鱼tar就加上right的元素,同时将right++;
            //如果right是数组最后一个位置的下一个位置(右开),那么就不存在符合条件的子数组。
            if(sum < target)
            {
                if(right == nums.size()) break;
                sum += nums[right];
                right++;
            }
            else
            {
                if(ret > (right - left))
                {
                    ret = right - left;
                }
                sum -= nums[left];
                left++;
            }
        }
        if(ret == INT_MAX) return 0;
        return ret;
    }
};

4.运行结果

在这里插入图片描述


总结

今天是算法练习的第3天。
逝者如斯夫,不舍昼夜 ,继续加油。
题目来源:力扣(LeetCode),著作权归领扣网络所有。
如果本篇文章对你有所启发的话,希望可以多多支持作者,谢谢大家!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/740096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python---文件与文件夹操作(你想了解的基本都在这)

前言&#xff1a; 计算机操作系统是以文件为单位对数据进行管理的。文件是指存储在某种介质上的数据集合。文件在存储介质上的位置是由驱动器名称、文件夹以及文件名来定位的。Python具有强大的文件处理功能&#xff0c;如文件的创建、打开、文件内容的写入、读出文件中的内容…

初级嵌入式软件工程师养成记(学习路线+学习资源+实战项目汇总)

我的圈子&#xff1a; 高级工程师聚集地 我是董哥&#xff0c;高级嵌入式软件开发工程师&#xff0c;从事嵌入式Linux驱动开发和系统开发&#xff0c;曾就职于世界500强企业&#xff01; 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; …

【Nginx07】Nginx学习:HTTP核心模块(四)错误页面与跳转

Nginx学习&#xff1a;HTTP核心模块&#xff08;四&#xff09;错误页面与跳转 最最核心的部分学习完了&#xff0c;但其实还有更多的内容要等待着我们探索。今天我们先来看到的就是关于错误页面的设置以及 301、302 跳转相关的内容。这两块内容都有一个特点&#xff0c;那就是…

基于51单片机+SHT30设计的环境温度与湿度检测设备(IIC模拟时序)

一、项目介绍 当前文章介绍基于51单片机和SHT30传感器设计的环境温度与湿度检测设备。设备采用IIC模拟时序通信协议&#xff0c;能够实时监测环境的温度和湿度&#xff0c;并将数据通过LCD显示屏显示出来&#xff1b;可以广泛应用于室内环境监测、气象观测、农业温室监测等领域…

路径规划算法:基于白冠鸡优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于白冠鸡优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于白冠鸡优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法…

leetcode 74. 搜索二维矩阵(java)

搜索二维矩阵 leetcode 74. 搜索二维矩阵题目描述抽象BST代码演示 抽象BST leetcode 74. 搜索二维矩阵 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/search-a-2d-matrix 题目描述 给你一个满足下述两条属性的 m x n 整…

033、TiDB特性_AUTO_INCREMENT

自增列 实现原理使用限制相关参数示例 实现原理 每一个自增列使用一个全局可见的键值对用于记录当前已分配的最大ID为了降低分布式系统分配自增ID的网络开销&#xff0c;每个TiDB节点会缓存一个不重复的ID段当前预分配的ID段使用完毕&#xff0c;或重启&#xff0c;都会重新再…

【数据结构导论】第 6 章:查找

目录 一、基本概念 二、静态查找表 &#xff08;1&#xff09;顺序表上的查找 —— 顺序查找 ① 过程 ② 算法 ③ 算法分析 &#xff08;2&#xff09;有序表上的查找 —— 二分查找 ① 二分查找思想 ② 二分查找过程 ③ 二分查找算法 ④ 示例 ⑤ 算法分析 &#…

CentOS系统内核升级(在线 离线)

centos7.x默认内核版本3.10.x&#xff0c;在安装docker时&#xff0c;部分功能&#xff08;如 overlay2 存储层驱动&#xff09;无法使用&#xff0c;并且部分功能可能不太稳定。所以建议大家升级到最新的稳定内核版本。 在线升级 1. 查看当前内核版本 uname -sr Linux 3.10…

python脚本编译成exe方式进行交付

Python自动化办公越来越方便&#xff0c;我们经常也会利用python来写一些自动化的小脚本&#xff0c;例如批量处理文档&#xff0c;自动发送邮件等等。 也许是平时吹得牛比较多&#xff0c;有一天秦医生就问起我说能不能给她写一个自动化处理生信数据的小脚本。 这当然是毫无问…

Stable Diffusion - 扩展插件 (Extensions) 功能的配置与使用

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/131576762 Prompt: (masterpiece, top quality, best quality, ((standing in centre)), ((1girl, black hair)), ((upper body, symmetrical com…

视频无损放大修复工具:Topaz Video AI对Mac和Windows的系统要求

Topaz Video AI是一款基于人工智能技术的视频增强软件&#xff0c;旨在提供高质量的视频修复、增强和转换功能。它可以通过智能算法和图像处理技术&#xff0c;改善视频的清晰度、稳定性、降噪效果&#xff0c;还能进行视频转码和格式转换。 Mac&#xff1a;Topaz Video AI fo…

[pyqt5]designer设计界面设计工具栏上图标和文字同时显示

打开设计师界面 右侧先选择toolBar然后去属性找到toolButtonStyle设置对应选项即可。

图扑 AR 技术应用与管理:施工建造、机柜扫描、办公室导航解决方案

随着科技的不断革新和创新&#xff0c;越来越多的行业开始迎来数字化时代的变革。建筑行业作为人类历史上最重要的产业之一&#xff0c;在数字化转型方面同样也在不断推进。图扑软件结合 AR 技术的应用&#xff0c;为建筑行业带来了更加便捷高效的建筑施工过程管理。 传统的建筑…

MathType7.4中文版下载安装教程

MathType7.4版是一款功能强大、专业实用、应用范围广的数学公式编辑器软件&#xff0c;这款软件采用了简体中文操作界面并且完美兼容office、wps等一系列常见办公工具&#xff0c;这样就能够很好的为相关用户省去了许多繁琐的操作步骤&#xff0c;用户在这里可以轻轻松松进行公…

使用Pytorch加载预训练模型及修改网络结构

Pytorch有自带的训练好的AlexNet、VGG、ResNet等网络架构。详见官网 1.加载预训练模型 import torch import torchvision import torch.nn as nn import torch.optim as optim import torch.nn.functional as F import torchvision.transforms as transforms import torchvis…

VBA系列技术资料MF33:VBA_将文本文件转换为Excel

【分享成果&#xff0c;随喜正能量】一心热枕对待生活&#xff0c;静静的安抚自己内心的急迫和焦虑&#xff0c;你人生的好运&#xff0c;常常在你沉醉于生活时悄悄临门的。。 我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高…

vue本地开发集成https

背景&#xff1a;在本地项目开发中&#xff0c;调用第三方服务获取音视频通话&#xff0c;音视频通话是采用 WebRTC 来实现的&#xff0c;而 WebRTC 中使用音视频设备进行取流是需要在安全域下才可以调起的设备权限 解决方案&#xff1a;使用npm安装mkcert&#xff0c;配置证书…

spring boot+MySQL实现学习平台

本次设计任务是要设计一个学习平台&#xff0c;通过这个系统能够满足学习信息的管理及学生和教师的学习管理功能。系统的主要功能包括首页&#xff0c;个人中心&#xff0c;学生管理&#xff0c;教师管理&#xff0c;课程信息管理&#xff0c;类型管理&#xff0c;作业信息管理…

Hive(18):DML之Load加载数据

1 背景 回想一下,当在Hive中创建好表之后,默认就会在HDFS上创建一个与之对应的文件夹,默认路径是由参数hive.metastore.warehouse.dir控制,默认值是/user/hive/warehouse。 要想让hive的表和结构化的数据文件产生映射,就需要把文件移到到表对应的文件夹下面,当然,可以在…