Datawhale 12月组队学习 leetcode基础 day1 枚举

这是一个新的专栏,主要是一些算法的基础,对想要刷leedcode的同学会有一定的帮助,如果在算法学习中遇到了问题,也可以直接评论或者私信博主,一定倾囊相助


进入正题,今天咱们要说的枚举算法,这是个很简单的算法哈,先说一下原理然后就看几道题练一下,算是很好学的算法了

枚举算法

    • 枚举算法简介
    • 枚举算法解题思路
    • 例题
      • 例题1
      • 例题2
    • 练习

枚举算法简介

这里简单的和大家分享一下什么是枚举,简单来说,就是一一列举可能出现的情况,和我们要满足的目标状况进行比对,得到满足条件的解答,举个例子:目标状况是找出值>5的数,数的范围是[0,10]这时候我们是不是只需要写一个很简单的循环,遍历0到10这11个数就可以了

for(int i = 0 ; i <= 10 ; ++i)
{if(i>5){printf("%d",i);}
}

因为这是一种很容易想到的思路,而且不容易出错,所以我们在做题想不出来很优秀的解法的时候,就可以考虑使用枚举的方法来做。

枚举算法解题思路

根据上面的例子,我们可以总结一下枚举算法的解题思路:
首先,确定枚举的范围,枚举的对象,判断条件。
其次遍历范围中的样例进行判断,看是否是问题的解。
最后,可以考虑优化枚举的范围,提高效率(主要就是时间复杂度)

例题

那么,根据枚举算法的解题思路,我们来做几道题,熟悉一下:

例题1

两数之和
在这里插入图片描述

这道题是一个非常简单的小题,只是让我们找出数组中两数之和等于目标值的数字组合的下标,并且只会有一个有效的答案,那么看第一个样例是[2,7,11,15] 目标值是9, 那么数字组合就是2,7 下标就是0,1。
那么用代码我们如何实现呢?
我们根据枚举的思路来分析,首先确定枚举的范围 那就是数组的大小了,枚举的目标就是数组里面的数字,目标条件就是数字组合相加等于目标值,
那么我们就可以写出以下遍历所有目标情况的代码:

    vector<int> twoSum(vector<int>& nums, int target) {int i = 0, j = 0;vector<int> res;//枚举答案 i外层循环j内层循环for(i = 0;i < nums.size();++i){for(j = i+1;j<nums.size();++j){if(nums[i]+nums[j] == target){res.push_back(i);res.push_back(j);return res;}}}return res;}

nums是题里的已知条件 也是我们要遍历的数组,target就是目标值
在这里我们写了两层的for循环来解决这问题 第一个for循环是让i 从0开始一直遍历到数组末尾 j是从i的下一位开始(题目中不允许重复的数字组合)用枚举条件进行判断 如果符合条件 那么就把数组组合返回,达成题目要求,如果编程基础比较薄弱,或者感觉博主说的很模糊 那么可以看下面张图
在这里插入图片描述
下面再看一道题:

例题2

计算质数
在这里插入图片描述
这里先说一下什么是质数 质数就是除了1和本身以外,不能被其他的数整除的数字 就叫做质数 。
这题我们还是按照枚举的方法做,首先确定枚举范围,那就是从2开始一直到n的数(1不是质数),遍历的对象就是2到n的数字,判断条件就是这个数是不是质数 是质数我们就统计他的数目 不是就不用。
那么根据枚举的思路我们可以先写一段伪代码:

for(int i = 2;i<n;++i)
{if(isprime(n))cnt++;
}

这就是一个标准的枚举解决方法的思路,这题的主要难点在哪里呢,就是计算这个数是不是质数 这个问题我们还是可以用枚举解决:
枚举的范围可以先定成 小于n/2的数 这是显然的 因为数字不可能整除比他的一半还大的数吧 ,枚举的对象就是 0-n/2的数字,目标就是看 n能不能整除我们枚举的对象 可以那就说明不是质数。所以代码如下

bool isPrime(int n)
{for(int i = 2;i<=n/2;++i){if( n%i == 0)return false;}return true;
}

代码写到这,这题可以结束了 但是还有一个小的问题 我们提交答案看一下:
在这里插入图片描述

可以看到对于一般的例子,我们是可以通过的,这说明代码的逻辑没问题,但是:
在这里插入图片描述
会超出时间限制 这就是问题所在,所以我们要进行枚举的第三步 缩减枚举的范围:
在这里提供两种思路 一种是把isprime函数里面的i<n/2变成i<根号2 也就是i × i<2 为什么可以这么写呢,简单证明如下:
在这里插入图片描述
再接下来一种思路就是埃氏筛或者线性筛 这两种方法和枚举其实关系不大,感兴趣的同学可以去查一下。

通过缩小枚举的范围 我们就可以达到缩小时间复杂度的目的。

练习

统计格内点的数目
这是一道大家回去自己练习的小题 ,在这里我给出其中一种解法 大家可以自由发挥。

class Solution {
public:bool incircle(vector<vector<int>>& circles, int x, int y){for (int i = 0; i < circles.size(); ++i){int a = circles[i][0];int b = circles[i][1];int r = circles[i][2];if ((x - a) * (x - a) + (y - b) * (y - b)<= r * r)return true;}return false;}int countLatticePoints(vector<vector<int>>& circles) {//确定区间 区间为上下左右 int cnt = 0;int up, down, left, right;up = -1;down = 101;left = 101;right = -1;for (int i = 0; i < circles.size(); ++i){int   r = circles[i][2];int   x = circles[i][0];int   y = circles[i][1];if (y-r < down)down = y - r;if (y + r > up)up = y + r;if (x - r < left)left = x - r;if (r + x > right)right = r + x;}//确定区间以后枚举遍历for (int i = left; i <= right; ++i){for (int j = down; j <= up; ++j){if (incircle(circles, i, j))cnt++;}}return cnt;}
};

有啥问题都可以提出来 ,博主有啥问题也恳请斧正,谢谢。

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

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

相关文章

高压功率放大器的作用是什么

高压功率放大器是一种电子设备&#xff0c;其作用是将低电平的信号增强到高功率水平&#xff0c;以驱动要求高电压和电流的负载。它在各种应用中起着至关重要的作用&#xff0c;包括无线通信、医疗仪器、雷达系统、工业控制等领域。 高压功率放大器在无线通信中具有重要意义。在…

[common c/c++] 为什么使用 semaphore 的生产者消费者模型需要两个信号量

正文&#xff1a; 信号量没有触及上限则阻塞post的原语&#xff0c;同时信号量除了系统限制的信号量最大值之外并没有接口可以用来设置上限。因此在一个信号量场景下&#xff0c;生产者在 post 信号的时候是没有束缚的&#xff0c;如果不控制生产量的话&#xff0c;会导致系统…

小红书产品评测怎么做?商家必看

以小红书为代表的社交电商平台&#xff0c;产品评测成为了消费者决策的重要参考。一篇高质量的产品评测&#xff0c;不仅能够帮助消费者全面了解产品也能提升商家品牌的知名度和口碑。因此&#xff0c;小红书产品评测的重要性不言而喻。 本文旨在为商家提供一份详尽的小红书产…

基于Qt的Live2D模型显示以及控制

基本说明 Live2D官方提供有控制Live2D模型的SDK,而且还提供了一个基于OpenGL的C项目Example,我们可以基于该项目改成Qt的项目&#xff0c;做一个桌面端的Live2D桌宠程序。 官方例子 经过改造效果如下图所示。 官方项目配置 下载官方提供的SDK例程,&#xff0c;选择Cubism …

网上很火的记事软件有哪些?可以分类记事的工具选哪个

日常记事在生活及工作方面都是非常重要&#xff0c;选择好用的记事软件可以督促各项任务的按时完成&#xff0c;。随着科技的发展&#xff0c;越来越多的记事软件涌现出来&#xff0c;让人眼花缭乱。那么&#xff0c;网上很火的记事软件有哪些&#xff1f;可以分类记事的工具应…

TestCase与TransactionTestCase的区别

目录 一、概述 二、区别 1、事务管理方式 2、性能影响 3、适用场景 三、示例代码 TestCase示例代码 TransactionTestCase示例代码 四、总结 TestCase与TransactionTestCase是Django框架中两个重要的测试类&#xff0c;用于对数据库操作进行测试。在编写测试用例时&…

【PHP编程实战】手把手教你如何下载文件,实例代码详解!

本文将向大家详细介绍PHP文件下载实例代码&#xff0c;具有一定的参考价值。对于一个网站而言&#xff0c;文件下载功能几乎是必备的。因此&#xff0c;了解如何使用PHP实现文件下载是非常必要的。在接下来的内容中&#xff0c;我们将一起探讨PHP文件下载的实现方法。 无控制类…

版本控制:让你的代码有迹可循

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

软件测试之持续集成详解

什么是持续集成&#xff1f; 持续集成是一种 DevOps 软件开发实践。采用持续集成时&#xff0c;开发人员会定期将代码变更合并到一个中央存储库中&#xff0c;之后系统会自动运行构建和测试操作。持续集成通常是指软件发布流程的构建或集成阶段&#xff0c;需要用到自动化组件…

Java二十一章 网络通信

1 网络程序设计基础 网络程序设计编写的是与其他计算机进行通信的程序。 局域网与互联网 服务器是指提供信息的计算机或程序&#xff0c;客户机是指请求信息的计算机或程序。网络用于连接服务器与客户机&#xff0c;实现两者间的相互通信。 网络协议 网络协议规定了计算机…

犹豫不决先排序,步步紧逼双指针---力扣刷题

目录 第一题&#xff1a;和为s的两个数 第二题&#xff1a;和为0的三个数 第三题&#xff1a;四数之和 第一题&#xff1a;和为s的两个数 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 思路&#xff1a; 法一先想到暴力枚举&#xff0c;即利用…

Vision Transformer模型架构详解

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

Title FX Pack

TitleFXPack增强了游戏标题/标志与惊人的效果,使科幻,赛博朋克,幻想,和其他主题的生活。轻松提升游戏的视觉效果。 下载: ​​Unity资源商店链接 资源下载链接

cache教程 2.单机并发缓存

0.对原教程的一些见解 个人认为原教程中两点知识的引入不够友好。 首先是只读数据结构 ByteView 的引入使用是有点迷茫的&#xff0c;可能不能很好理解为什么需要ByteView。 第二是主体结构 Group的引入也疑惑。其实要是熟悉groupcache&#xff0c;那对结构Group的使用是清晰…

linux中堡垒机

堡垒机 堡垒机概念目的 安装Jumpserver使用资产管理应用管理附加设置问题 堡垒机 概念 堡垒机&#xff0c;就是在一个特定的网络环境下&#xff0c;为了保障网络和数据不受来自外部和内部用户的入侵和破坏&#xff0c;采用各种技术手段监控和记录运维人员对网络内的服务器、网…

12.11_黑马数据结构与算法笔记Java

目录 070 栈 链表实现 概念理清&#xff1a;什么时候是指针的指向&#xff0c;什么时候是元素本身&#xff1f; 071 栈 数组实现 072 栈 e01 有效的括号 072 栈 e02 后缀表达式求值 072 栈 e03 中缀表达式转后缀1 072 栈 e03 中缀表达式转后缀2 072 栈 e03 中缀表达式转…

来看!天津靠谱Java培训机构哪家更好一点?

Java培训对某些计算机爱好者和IT从业者来说&#xff0c;是一道必经之路。包括Java基础、JavaWeb、JavaEE、大数据开发、人工智能等多方面的技术领域。参加Java培训可以帮助我们掌握计算机编程语言的基础知识&#xff0c;掌握Java语言编程技巧&#xff0c;快速提高编程水平。 报…

JVM虚拟机系统性学习-运行时数据区(方法区、程序计数器、直接内存)

方法区 方法区本质上是 Java 编译后代码的存储区域&#xff0c;存储了每一个类的结构信息&#xff0c;如&#xff1a;运行时常量池、成员变量、方法、构造方法和普通方法的字节码指令等内容 方法区主要存储的数据如下&#xff1a; Class 类型信息&#xff0c;如该 Class 为 …

人工智能在安全领域的应用

ChatGPT 等 AI 应用在网络安全领域的应用效果明显&#xff0c;其自动编程能力、分析能力及自身集成的知识库能够帮助网络安全从业者提升工作效率&#xff0c;改进组织的网络安全计划。 &#xff08;一&#xff09;代码生成与检测能力 可用于开发漏洞挖掘工具。如目前可以利用…

欧拉函数与欧拉定理

文章目录 AcWing 873. 欧拉函数题目链接欧拉函数欧拉函数的证明思路CODE时间复杂度分析 AcWing 874. 筛法求欧拉函数题目链接问题分析与时间复杂度CODE思路 欧拉定理 AcWing 873. 欧拉函数 题目链接 https://www.acwing.com/activity/content/problem/content/942/ 欧拉函数 …