整数序列权重排序——基于深度优先搜索(DFS)以及记忆化搜索

作者:w2416717840日期:2025/11/16

提示:本文适合对算法设计感兴趣的道友一起互相学习,如有疑问,欢迎评论区或者私信讨论。

文章目录

  • 前言
  • 一、题目介绍
  • 二、前置知识扩展
    • 1.深度优先遍历
      • 1.1递归DFS
        • 1.1非递归DFS
    • 2.@cache装饰器
    • 3.range()函数
    • 4.sorted()函数
  • 三、解题思路及代码解读
    • 1.思路分析
    • 2.代码解读
  • 总结

前言

力扣每日一题记录:

本文主要讲解了如何使用递归的方法进行深度遍历搜索来解决Collatz猜想(也称3n + 1猜想)。同时采用记忆化搜索的方法,使用python内置的@cache装饰器对自定义的递归函数def(…)进行缓存,从而减少递归函数中的重复运算。采用range(…)函数对自变量的整数序列的范围进行遍历,使用python内置的sorted函数对递归计算获得的结果进行排序,通过索引操作获得题目要求的对应位置上的元素值。


一、题目介绍

LeetCode 1507,算术评级:6

我们将整数 x 的 权重 定义为按照下述规则将 x 变成 1 所需要的步数:

如果 x 是偶数,那么 x = x / 2
如果 x 是奇数,那么 x = 3 * x + 1
比方说,x=3 的权重为 7 。因为 3 需要 7 步变成 1 (3 --> 10 --> 5 --> 16 --> 8 --> 4 --> 2 --> 1)。

给你三个整数 lo, hi 和 k 。你的任务是将区间 [lo, hi] 之间的整数按照它们的权重 升序排序 ,如果大于等于 2 个整数有 相同 的权重,那么按照数字自身的数值 升序排序 。

请你返回区间 [lo, hi] 之间的整数按权重排序后的第 k 个数。

示例 1:

1输入··:lo = 12, hi = 15, k = 2
2输出:13
3解释:12 的权重为 9(12 --> 6 --> 3 --> 10 --> 5 --> 16 --> 8 --> 4 --> 2 --> 1)
413 的权重为 9
514 的权重为 17
615 的权重为 17
7区间内的数按权重排序以后的结果为 [12,13,14,15] 。对于 k = 2 ,答案是第二个整数也就是 13 。
8注意,12 和 13 有相同的权重,所以我们按照它们本身升序排序。14 和 15 同理。
9

示例 2:

1输入:lo = 7, hi = 11, k = 4
2输出:7
3解释:区间内整数 [7, 8, 9, 10, 11] 对应的权重为 [16, 3, 19, 6, 14] 。
4按权重排序后得到的结果为 [8, 10, 11, 7, 9] 。
5排序后数组中第 4 个数字为 7 。
6

数据限制:

1- 1 <= lo <= hi <= 1000
2- 1 <= k <= hi - lo + 1
3

二、前置知识扩展

熟悉一些常用的内置函数以及数据结构算法对您的解题效率会有很大提升。

1.深度优先遍历

深度优先搜索(Depth-First Search,DFS)是一种用于遍历或搜索树或图的算法。它沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点 v 的所在边都已被探寻过,搜索将回溯到发现节点 v 的那条边的起始节点。这个过程一直进行到已发现从源节点可达的所有节点为止。

深度优先搜索算法通常分为递归和非递归两种。

1.1递归DFS

DFS 通常使用递归来实现。递归函数会沿着一条路径深入到尽可能深的节点,然后回溯到上一个节点,再深入到另一条路径。
“示例图”

例如:

1def dfs(graph, start, visited=None):
2    if visited is None:
3        visited = set()
4    visited.add(start)
5    print(start)  # 打印访问的节点
6    for next in graph[start] - visited:
7        dfs(graph, next, visited)
8    return visited
9
10# 示例图
11graph = {
12   
13   
14    'A': set(['B', 'C']),
15    'B': set([

整数序列权重排序——基于深度优先搜索(DFS)以及记忆化搜索》 是转载文章,点击查看原文


相关推荐


前端开发小技巧-【JavaScript】- 获取元素距离 document 顶部的距离
禁止摆烂_才浅2025/11/15

获取元素距离 document 顶部的距离 方案1:使用 offsetTop(最简单) const element = document.getElementById('myDiv') const distance = element.offsetTop console.log(distance) // 500(像素) 方案2:使用 getBoundingClientRect() + scrollY(最准确) const element = document.getElementById(


稳定边界层高度参数化方案的回归建模
mayubins2025/11/14

稳定边界层高度参数化方案的回归建模 为了发展一个适用于CAS-ESM气候系统模式的稳定边界层高度参数化方案,本研究基于湍流尺度分析理论,采用多元线性回归方法,对Zilitinkevich类型公式中的经验系数进行确定性拟合。该公式综合考虑了地表机械强迫、热力强迫以及自由大气静力稳定度的综合影响。 理论框架 我们所采用的参数化公式源于稳定层结下湍流动能的平衡关系,其函数形式如下: 1/h² = C1 * (f² / τ) + C2 * (N |f| / τ) + C3 * (|f β F₊| / τ


Python 的内置函数 isinstance
IMPYLH2025/11/13

Python 内建函数列表 > Python 的内置函数 isinstance Python 的内置函数 isinstance() 用于判断一个对象是否属于某个类或类型,或者是否属于由这些类型组成的元组中的一个。它是 Python 中类型检查的重要工具,相比于 type() 函数具有更灵活的类型检查能力。 其语法为: isinstance(object, classinfo) 其中: object 是要检查的对象classinfo 可以是一个类型对象,或者由类型对象组成的元组 is


[免费]基于Python的农产品可视化系统(Django+echarts)【论文+源码+SQL脚本】
java1234_小锋2025/11/11

大家好,我是java1234_小锋老师,看到一个不错的基于Python的农产品可视化系统(Django+echarts)【论文+源码+SQL脚本】,分享下哈。 项目视频演示 https://www.bilibili.com/video/BV1mYkoBLEju/ 项目介绍 本研究提出了一种基于Python的农产品可视化系统,结合Django框架和ECharts库,旨在为农产品数据的展示和分析提供便捷、高效的解决方案。系统通过Django框架构建后端服务,使用ECharts实现前端数提供数


用 PyQt 开发一个桌面计算器:从零到完整实战指南
Python私教2025/11/9

作者:张大鹏 时间:2025-11-05 标签:Python、PyQt5、GUI、桌面开发、实战教程 一、前言 在桌面应用开发中,计算器 是一个非常适合入门的练手项目。 它涉及到图形界面设计、事件绑定、信号槽机制、布局管理等核心概念。 今天我们将使用 PyQt5(同样适用于 PyQt6)一步步实现一个可用的计算器程序,从 UI 布局到功能逻辑完整讲解。 最终效果如下👇: 支持加减乘除和小数运算;按钮布局整齐;可通过按钮或键盘输入操作;界面美观,可打包为独立应用。 二、项目环境 项目依赖


React+Tailwind CSS+Shadcn UI
再希2025/11/7

推荐常用网址 yhttps://react.dev/learn/describing-the-ui 使用 Vite 安装 Tailwind CSS - Tailwind CSS Introduction - shadcn/ui 下面这个地址记录了前端常用的命令,以及学习教程等,推荐给各位 https://www.houdunren.com/doc/article/21/208 创建react项目首先需要准备好nodeJS环境,我这里使用的是vite脚手架 步骤如下: 使用 Vit


前端新手必看!困扰90%人的10个JavaScript问题,一次性帮你解决
良山有风来2025/11/4

是不是经常被JavaScript的各种“奇怪”行为搞到头大?明明照着教程写代码,结果运行起来却各种报错?别担心,这些问题几乎每个前端新手都会遇到。 今天我就把新手最容易踩坑的10个JavaScript问题整理出来,每个问题都会给出清晰的解释和实用的解决方案。看完这篇文章,你就能彻底理解这些“坑”背后的原理,写出更健壮的代码。 变量提升的陷阱 很多新手都会困惑,为什么变量在声明之前就能使用?这其实是JavaScript的变量提升机制在作怪。 console.log(myName); // 输出:u


低空经济网络安全体系
芯盾时代2025/10/31

为了促进低空经济的稳健发展,构建完善的网络安全体系势在必行。低空经济网络安全业务体系的重点在于将安全因素深度融入业务决策流程,确保在满足各类场景需求的同时,安全措施得以全面落实。产业合作体系则强调产学研用管多方的协同合作,以期通过集体努力完善相关政策、加强监管、推动技术创新和标准制定。同时,需要特别关注机载智能算法的相关安全。威胁定级与应急防护体系聚焦安全威胁的分类分级和应急处置,旨在构建低空经济网络安全的主动防御能力。供应链安全体系则着眼于生产制造全链条的安全管理,从而确保低空经济供应链的安全


【普中STM32F1xx开发攻略--标准库版】-- 第 9 章 STM32 固件库介绍
普中科技2025/10/29

(1)实验平台: 普中STM32F103朱雀开发板https://item.taobao.com/item.htm?id=620302685024普中STM32F103玄武开发板https://item.taobao.com/item.htm?id=603479028876(2)资料下载:普中科技-各型号产品资料下载链接         前面章节为大家简单介绍了如何使用寄存器点亮开发板上 LED, 这种开发方式显然是不适合大众, 对于 STM32 这样庞大的芯片, 内部寄存器实在太多,


TraceId如何在Spring-Cloud微服务的REST调用中传递
青鱼入云2025/10/26

文章目录 推荐方案:基于Spring Cloud Sleuth(无侵入,官方推荐)1. 集成Sleuth2. 核心原理3. 日志配置(输出traceId)4. 验证 自定义实现方案(不依赖Sleuth,了解原理)1. 定义常量(统一Header键)2. 发送端:通过拦截器传递traceId(1)RestTemplate调用场景(2)Feign调用场景 3. 接收端:通过过滤器提取traceId并设置到MDC 关键注意事项 在Spring Cloud微服务

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0