Leetcode算法基础篇-枚举算法

背景

好久没写过算法题了,趁着Datawhale开学这期学习获取重温一下基础算法!

本次分享设计的内容为基础算法篇,主要有:

  • 枚举算法(第 01 ~ 02 天)
  • 递归算法与分治算法(第 03 ~ 06 天)
  • 回溯算法(第 07 ~ 09 天)
  • 贪心算法(第 10 ~ 12 天)
  • 位运算(第 13 ~ 14 天)

枚举算法

枚举算法(Enumeration
Algorithm):也称为穷举算法,指的是按照问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举的过程中,将它们逐一与目标状态进行比较以得出满足问题要求的解。在列举的过程中,既不能遗漏也不能重复。

枚举算法解题思路如下:

  1. 确定枚举对象、枚举范围和判断条件,并判断条件设立的正确性。
  2. 枚举可能的情况,并验证是否是问题的解。
  3. 考虑提高枚举算法的效率。

我们可以从下面几个方面考虑提高算法的效率:

  • 抓住问题状态的本质,尽可能缩小问题状态空间的大小。
  • 加强约束条件,缩小枚举范围。
  • 根据某些问题特有的性质,例如对称性等,避免对本质相同的状态重复求解。

练习题

1. 两数之和

思路

  • 在范围内,枚举两个数即可。

代码

class Solution(object):def twoSum(self, nums, target):""":type nums: List[int]:type target: int:rtype: List[int]"""l = len(nums)for i in range(l):for j in range(i + 1, l):if nums[i] + nums[j] == target:return [i, j]return []

204. 计数质数

思路

  • 首先是判断质数:可以枚举2到自己的所有可能因数,如果都不能整除,说明是质数。
  • 判断质数进阶:考虑到如果 i 是 x 的因数,则 x/i 也必然是 x 的因数,则我们只需要检验这两个因数中的较小数即可。而较小数一定会落在 [ 2 , x ] [2, \sqrt{x} ] [2,x ] 上。因此我们在检验 x 是否为质数时,只需要枚举 [ 2 , x ] [2, \sqrt{x} ] [2,x ]中的所有数即可。
  • 枚举即可

进阶筛法:学习链接

  • 这里考虑线性筛法,即发现一个质数的倍数肯定不是质数,每次标记出来。

代码

暴力枚举(超时):

class Solution(object):def countPrimes(self, n):""":type n: int:rtype: int"""if n < 2:return 0cnt = 0for i in range(2, n):if self.isPrime(i):cnt = cnt + 1return cntdef isPrime(self, x):if x < 2:return Falseelif x == 2:return Truel = math.sqrt(x) + 1for i in range(2, int(l)):if x % i == 0:return Falsereturn True

筛法:

class Solution(object):def countPrimes(self, n):""":type n: int:rtype: int"""if n < 2:return 0primes = [True]* nprimes[0], primes[1] = False, Falsefor i in range(2, int(pow(n, 0.5)) + 1):if primes[i]:for j in range(i * i, n, i):primes[j] = Falsereturn sum(primes)

1925. 统计平方和三元组的数目

思路

  • 不难发现:n<5 时,结果为0
  • 枚举a,b,同时计算出它们的平方和,这时候可以两种选择
    • 考虑计算出潜在的c,然后判断是否在剩下的数范围
    • 或者继续枚举c,计算 c ∗ c = = a ∗ a + b ∗ b c*c == a*a + b*b cc==aa+bb
  • 另外观察到 a和b可以互换,所以我们顺序枚举,最后得到结果*2 即可答案

代码

class Solution(object):def countTriples(self, n):""":type n: int:rtype: int"""if n < 5:return 0ans = 0for i in range(3, n + 1):for j in range(i + 1, n + 1):kk = i * i + j * jfor k in range(j + 1, n + 1):if kk == k * k:ans += 1continuereturn ans * 2

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

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

相关文章

Github 2024-09-21Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-09-21统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Move项目1JavaScript项目1Deno: 现代JavaScript和TypeScript运行时 创建周期:2118 天开发语言:Rust, JavaScript协议类型:MIT Lic…

LSI SAS 9361-8i和SAS3008 12 gb / s PCIe 3.0 RAID 阵列卡配置

LSI SAS 9361-8i和SAS3008 12 gb / s PCIe 3.0 RAID 阵列卡配置 开机&#xff0c;BIOS自检&#xff0c;可以看到设备硬盘信息&#xff0c;以及提示CtrlR进入Raid卡配置界面。 按CtrlR进入Raid卡配置界面&#xff0c;一般来说使用CtrlR进入Raid卡配置界面的Raid卡配置都通用。 …

ant design vue实现表格序号递增展示~

1、代码实例 //current当前页数 //pageSize每页记录数 const columns [{title: 序号,width: 100,customRender: ({ index }) > ${index (current.value - 1) * pageSize.value 1},align: center,fixed: left,} ] 2、效果图

9.24今日错题解析(软考)

前言 这是用来记录我每天备考软考设计师的错题的&#xff0c;今天知识点为操作系统和数据结构&#xff0c;大部分错题摘自希赛中的题目&#xff0c;但相关解析是原创&#xff0c;有自己的思考&#xff0c;为了复习&#xff1a;&#xff09;&#xff0c;最后希望各位报考软考的…

【第十九章:Sentosa_DSML社区版-机器学习之模型评估】

目录 19.1 评估 19.2 混淆矩阵 19.3 ROC-AUC 19.4 时间序列模型评估 【第十九章&#xff1a;Sentosa_DSML社区版-机器学习之模型评估】 19.1 评估 1.算子介绍 评估算子(EvaluationNode) 用于评估用当前数据训练出来的模型的正确性&#xff0c;显示对模型各个评价指标的具…

从零预训练一个tiny-llama#Datawhale组队学习Task2

完整的教程请参考&#xff1a;datawhalechina/tiny-universe: 《大模型白盒子构建指南》&#xff1a;一个全手搓的Tiny-Universe (github.com) 这是Task2的学习任务 目录 Qwen-blog Tokenizer&#xff08;分词器&#xff09; Embedding&#xff08;嵌入&#xff09; RMS …

个人行政复议在线预约系统开发+ssm论文源码调试讲解

第二章 开发工具及关键技术介绍 2.1 JAVA技术 Java主要采用CORBA技术和安全模型&#xff0c;可以在互联网应用的数据保护。它还提供了对EJB&#xff08;Enterprise JavaBeans&#xff09;的全面支持&#xff0c;java servlet API&#xff0c;JSP&#xff08;java server pages…

武汉正向科技 格雷母线定位系统生产厂家

为了适应机车无人化项目对地址高精度的要求&#xff0c;我们推出了高精度格雷母线&#xff0c;根据地址的检测原理&#xff0c;地址精度取决于格雷母线最小交叉环的精度&#xff0c;传统的格雷母线内胆采用柔性泡沫内胆&#xff08;图片1&#xff09;&#xff0c;格雷母线最小交…

末端无人配送产业链

末端无人配送产业链涵盖部件、系统、整车制造、运营服务、应用场景等五大环节。 四类企业竞逐末端配送&#xff0c;“科技公司物流企业”成最佳CP、平台公司蓄势待发

浏览器指纹修改指南2024 -了解SpeechVoice(四)

引言 随着互联网技术的飞速发展,用户隐私保护的重要性日益凸显。浏览器作为我们访问互联网的主要工具之一,其独特的指纹信息却成为了用户隐私的一大隐患。浏览器指纹技术利用浏览器的各种特性,如用户代理(User Agent)、字体列表、插件等,生成一个独一无二的识别码,使得用户即便…

详细分析SpringMvc中HandlerInterceptor拦截器的基本知识(附Demo)

目录 前言1. 基本知识2. Demo3. 实战解析 前言 对于Java的基本知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目】实战CRUD的功能整理&#xff08;持续更新&#xff09; 1. 基本知识 HandlerInter…

MFC - 复杂控件_2

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天讲解剩下的复杂控件知识点 IP地址栏 绘图准备: 调整windows窗口大小、设置 ip address control设置 Button按钮&#xff0c;修改名称 添加IP栏 变量&#xff1a;m_IP 获取IP栏内容 void CMFCApplication3Dlg::…

C++中的string模拟实现

上一章讲了库中的string函数&#xff0c;这次我们来讲一讲模拟实现 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<assert.h> using namespace std; //域名 namespace zzj {class String {public:typedef char* iterator;typedef const char* cons…

【Java 问题】基础——Java 概述

Java 概述 1. 什么是 Java ?2. Java 语言有哪些特点3. JVM、JDK 和 JRE 有什么区别&#xff1f;4. 说说什么是跨平台性&#xff1f;原理是什么&#xff1f;5. 什么是字节码&#xff1f;采用字节码的好处是什么&#xff1f;6. 为什么说 Java 语言 "编译与解释并存"?…

将 Go 作为脚本语言用及一些好用的包

前言 Go 作为一种可用于创建高性能网络和并发系统的编程语言&#xff0c;它的生态应用变得越来越广泛&#xff0c;同时&#xff0c;这也激发了开发人员使用 Go 作为脚本语言的兴趣。虽然目前 Go 还未准备好作为脚本语言 “开箱即用” 的特性&#xff0c;用来替代 Python 和 Ba…

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【Perf调测】

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 基本概念 Perf为性能分析工具&#xff0c;依赖PMU&#xff08;Per…

HTML讲解(三)通用部分

目录 1.空格标记 2.特殊文字的标记 3.注释语句 4.对文字字体的设置 5.修改文字形态 6.换行标记 7.居中标记 8.水平线标记 9.设置滚动弹幕 1.空格标记 在HTML中&#xff0c;我们想打印空格并不能直接敲一个空格键&#xff0c;因为如果是敲空格键&#xff0c;那无论你敲…

2万字长文超全详解!深度学习时代阴影检测、去除与生成在图像与视频中的全面综述

论文链接&#xff1a;https://arxiv.org/pdf/2409.02108 Github链接&#xff1a;https://github.com/xw-hu/Unveiling-Deep-Shadows 亮点直击 深度学习时代阴影分析的全面综述。本文对阴影分析进行了深入的综述&#xff0c;涵盖了任务、监督级别和学习范式等各个方面。本文的分…

SpringBoot整合ELK实现日志监控(保姆级教程)

新建SpringBoot项目 pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.…

虚幻引擎的三种输入模式和将控件显示到屏幕上

首先要知道一个概念 , HUD 和 Input 都是由 PlayerController 来控制的 而虚幻的Input控制模式有三种 Set Input Mode Game Only (设置输入模式仅限游戏): 视角会跟着鼠标旋转 , 就是正常游戏的模式 , 这也是游戏默认输入模式 Set Input Mode UI Only (设置输入模式仅限UI): …