每日算法-250410
今天分享两道 LeetCode 题目,它们都可以巧妙地利用二分查找来解决。
275. H 指数 II
问题描述
思路:二分查找
H 指数的定义是:一个科学家有 h
篇论文分别被引用了至少 h
次。
题目给定的 citations
数组是升序排列的。这为我们使用二分查找提供了可能。
我们可以尝试猜测一个 H 指数 h
,然后检查是否满足条件。如果 citations
数组中存在 h
篇论文的引用次数都大于等于 h
,那么这个 h
就是一个可能的 H 指数。我们希望找到最大的那个 h
。
考虑数组下标 mid
和数组长度 n
。
如果 citations[mid]
表示第 mid
篇论文的引用次数(数组从0开始计数),那么从 mid
到 n-1
一共有 n - mid
篇论文。
由于数组是升序的,这 n - mid
篇论文的引用次数都至少为 citations[mid]
。
我们的目标是找到一个最大的 h
,使得有 h
篇论文的引用次数至少为 h
。
这可以转化为:找到一个最大的 h
,使得 citations[n-h] >= h
。
解题过程:二分查找 H 指数的边界
我们可以利用二分查找来寻找这个 h
的临界点。
搜索范围是 [0, n]
(可能的h指数范围),但更方便的是直接在数组下标 [0, n-1]
上进行二分。
-
二分条件:比较
citations[mid]
和n - mid
。n - mid
代表的是:如果我们假设 H 指数是h = n - mid
,那么我们需要n - mid
篇论文的引用次数至少为n - mid
。- 由于数组已排序,从下标
mid
到n-1
的这n - mid
篇论文是引用次数最高的。 citations[mid]
是这n - mid
篇论文中引用次数最少的那一篇。- 因此,判断条件
citations[mid] >= n - mid
意味着:以mid
为起点的这n - mid
篇论文,它们的引用次数都至少为n - mid
。这表明h = n - mid
是一个可能的 H 指数。
-
指针移动:
- 如果
citations[mid] >= n - mid
:说明当前的mid
对应的h = n - mid
是一个潜在的 H 指数。但是,我们想找最大的h
。更大的h
对应着更小的数组下标。所以,我们尝试在左半部分[left, mid - 1]
继续搜索,看看能否找到一个更小的mid'
使得citations[mid'] >= n - mid'
成立(这意味着更大的h
)。因此,right = mid - 1
。 - 如果
citations[mid] < n - mid
:说明当前的mid
对应的h = n - mid
太大了,连引用次数最少的citations[mid]
都达不到n - mid
次。我们需要减小h
,也就是增大mid
。所以,在右半部分[mid + 1, right]
搜索。因此,left = mid + 1
。
- 如果
-
结果:
- 循环结束时 (
left > right
),left
指向的是第一个不满足citations[mid] >= n - mid
条件的mid
的下一个位置(或者说是第一个满足citations[mid] < n - mid
的位置,如果我们是从左往右看的话)。 - 根据 H 指数的定义,满足
citations[i] >= n - i
的下标i
越小,对应的h = n - i
就越大。 left
是第一个使得h = n - left
不再满足条件(或刚好满足条件的边界的下一个)的下标。- 那么,最大的满足条件的
h
就是n - left
。因为从left
到n-1
一共有n - left
个元素,而left
是使得citations[left] >= n - left
潜在成立的最小下标(或者说,left-1
是最后一个明确满足citations[right] >= n - right
的right
值之后的位置)。因此,有n - left
篇论文(下标从left
到n-1
)的引用次数大于等于n - left
。
- 循环结束时 (
复杂度
- 时间复杂度: O ( log n ) O(\log n) O(logn), 因为使用了二分查找。
- 空间复杂度: O ( 1 ) O(1) O(1), 只使用了常数级别的额外空间。
Code
class Solution {public int hIndex(int[] citations) {int n = citations.length;int left = 0, right = n - 1;while (left <= right) {int mid = left + (right - left) / 2;if (citations[mid] >= n - mid) {right = mid - 1;} else {left = mid + 1;}}return n - left;}
}
2226. 每个小孩最多能分到多少糖果
问题描述
思路:二分查找
这个问题的核心在于找到一个最大的糖果数 x
,使得我们可以从 candies
数组中分割出至少 k
堆,每堆都包含 x
个糖果。
我们可以观察到这个问题的答案具有单调性:
- 如果我们能让每个小孩分到
x
个糖果,那么我们肯定也能让每个小孩分到x-1
个糖果。 - 如果我们无法让每个小孩分到
x
个糖果,那么我们肯定也无法让每个小孩分到x+1
个糖果。
这种单调性非常适合使用二分查找来解决。我们可以在可能的糖果数范围 [1, max_candies]
内进行二分查找。
解题过程:二分答案
-
确定搜索范围:
- 每个小孩至少分到 1 个糖果(如果可能的话),所以下界
left = 1
。 - 每个小孩最多能分到的糖果数不会超过
candies
数组中的最大值max(candies[i])
,也不会超过总糖果数除以小孩数sum(candies) / k
。所以上界right
可以取min(max(candies[i]), sum(candies) / k)
。需要注意,如果sum < k
,则一个都分不了,应返回 0。我们在计算right
时处理这种情况。 - 注意:糖果总数
sum
和小孩数k
可能很大,需要使用long
类型。
- 每个小孩至少分到 1 个糖果(如果可能的话),所以下界
-
check(mid)
函数:我们需要一个辅助函数check(candies, mid, k)
来判断:如果每个小孩分mid
个糖果,是否能够满足k
个小孩的需求。- 遍历
candies
数组中的每一堆糖果c
。 - 对于每一堆
c
,它可以分出c / mid
份,每份包含mid
个糖果。 - 计算所有糖果堆能分出的总份数
count = sum(c / mid)
。 - 判断逻辑:如果
count >= k
,说明分mid
个糖果是可行的。如果count < k
,说明分mid
个糖果是不可行的。
- 遍历
-
二分查找逻辑:
- 计算中间值
mid = left + (right - left) / 2
。 - 调用
check(candies, mid, k)
。 - 指针移动:
- 如果
check
返回true
(即count >= k
),说明每个小孩分mid
个糖果是可行的。我们希望找到最大的可行值,所以我们尝试增大mid
,在右半部分[mid + 1, right]
继续搜索,并记录mid
作为一个可能的答案。ans = mid; left = mid + 1;
- 如果
check
返回false
(即count < k
),说明每个小孩分mid
个糖果是不可行的,mid
太大了。我们需要减小mid
,在左半部分[left, mid - 1]
搜索。right = mid - 1;
- 如果
- 计算中间值
-
结果:
-
我们可以维护一个变量
ans
来记录最后一次check
成功的mid
值。当循环结束时,ans
就是最大可行解。 -
循环结束后,
right
指向的就是最大的可行解。为什么?因为right
最终停在最后一个使得check
成功的mid
上(或者是mid-1
移动过来的)。当left
超过right
时,left
指向第一个使得check
失败的值,而right
指向最后一个使得check
成功的值。 -
代码细节:下面代码中的
check
函数返回的是count < k
(即是否不可行)。if (check(candies, mid, k))
为true
(即count < k
,不可行),则right = mid - 1
(需要减小糖果数)。if (check(candies, mid, k))
为false
(即count >= k
,可行),则left = mid + 1
(尝试增加糖果数)。- 循环结束后,
left
是第一个使得count < k
的mid
值,right
是最后一个使得count >= k
的mid
值。因此返回right
。
-
复杂度
- 时间复杂度: O ( N log M ) O(N \log M) O(NlogM), 其中 N 是糖果堆的数量 (
candies.length
),M 是糖果数的最大可能范围(即right
的初始值)。每次check
需要 O ( N ) O(N) O(N) 时间,二分查找进行 O ( log M ) O(\log M) O(logM) 次。 - 空间复杂度: O ( 1 ) O(1) O(1), 只使用了常数级别的额外空间。
Code
class Solution {public int maximumCandies(int[] candies, long k) {long sum = 0;int max = 0;for (int i = 0; i < candies.length; i++) {sum += candies[i];max = Math.max(max, candies[i]);}int left = 1, right = (int)Math.min(max, sum / k);if (right <= 0) {return 0;}while (left <= right) {int mid = left + (right - left) / 2;if (check(candies, mid, k)) {right = mid - 1;} else {left = mid + 1;}}return right;}private boolean check(int[] arr, int max, long k) {long count = 0;for (int i = 0; i < arr.length; i++) {count += arr[i] / max;}return count < k;}
}
相关文章:
每日算法-250410
今天分享两道 LeetCode 题目,它们都可以巧妙地利用二分查找来解决。 275. H 指数 II 问题描述 思路:二分查找 H 指数的定义是:一个科学家有 h 篇论文分别被引用了至少 h 次。 题目给定的 citations 数组是升序排列的。这为我们使用二分查找…...
swagger + Document
swagger 虽然有了api接口,对于复杂接口返回值说明,文档还是不能少。如果是一个人做的还简单一点,现在都搞前后端分离,谁知道你要取那个值呢...
线程同步与互斥(下)
线程同步与互斥(中)https://blog.csdn.net/Small_entreprene/article/details/147003513?fromshareblogdetail&sharetypeblogdetail&sharerId147003513&sharereferPC&sharesourceSmall_entreprene&sharefromfrom_link我们学习了互斥…...
MySQL 优化教程:让你的数据库飞起来
文章目录 前言一、数据库设计优化1. 合理设计表结构2. 范式化与反范式化3. 合理使用索引 二、查询优化1. 避免使用 SELECT *2. 优化 WHERE 子句3. 优化 JOIN 操作 三、服务器配置优化1. 调整内存分配2. 调整并发参数3. 优化磁盘 I/O 四、监控与分析1. 使用 EXPLAIN 分析查询语句…...
SD + Contronet,扩散模型V1.5+约束条件后续优化:保存Canny边缘图,便于视觉理解——stable diffusion项目学习笔记
目录 前言 背景与需求 代码改进方案 运行过程: 1、Run编辑 2、过程: 3、过程时间线: 4、最终效果展示: 总结与展望 前言 机器学习缺点之一:即不可解释性。最近,我在使用stable diffusion v1.5 Co…...
位掩码、哈希表、异或运算、杨辉三角、素数查找、前缀和
1、位掩码 对二进制数操作的方法,(mask1<<n),将数mask的第n位置为1,其它位置为0,即1000...2^n,当n较小时,可以用于解决类似于0/1背包的问题,要么是0,要么是1&…...
安装OpenJDK1.8 17 (macos M芯片)
安装OpenJDK 1.8 下载完后,解压,打开 环境变量的配置文件即可 vim ~/.zshrc #export JAVA_HOME/Users/xxxxx/jdk-21.jdk/Contents/Home #export JAVA_HOME/Users/xxxxx/jdk-17.jdk/Contents/Home #export JAVA_HOME/Users/xxxxx/jdk-11.jdk/Contents…...
Spring Boot 自动加载流程详解
前言 Spring Boot 是一个基于约定优于配置理念的框架,它通过自动加载机制大大简化了开发者的配置工作。本文将深入探讨 Spring Boot 的自动加载流程,并结合源码和 Mermaid 图表进行详细解析。 一、Spring Boot 自动加载的核心机制 Spring Boot 的自动加…...
2025 年“认证杯”数学中国数学建模网络挑战赛 C题 化工厂生产流程的预测和控制
流水线上也有每个位置的温度、压力、流量等诸多参数。只有参数处于正常范 围时,最终的产物才是合格的。这些参数很容易受到外部随机因素的干扰,所 以需要实时调控。但由于参数众多,测量困难,很多参数想要及时调整并不容 易&#x…...
Richardson-Lucy (RL) 反卷积算法 —— 通过不断迭代更新图像估计值
文章目录 一、RL反卷积算法(1)主要特点(2)基本原理(3)关键步骤(4)优化算法 二、项目实战(1)RL 反卷积(2)优化:RL 反卷积 …...
2025.04.10-拼多多春招笔试第四题
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 04. 优惠券最优分配问题 问题描述 LYA是一家电商平台的运营经理,负责促销活动的策划。现在平台上有 n n n...
------------------V2024-2信息收集完结------------------
第二部分信息收集完结撒花*★,*:.☆( ̄▽ ̄)/$:*.★* 。 进入开发部分,工具要求:phpstorm Adobe Navicat16 小皮 准备完毕 php开发起飞起飞~~~~~...
Java Lambda与方法引用:函数式编程的颠覆性实践
在Java 8引入Lambda表达式和方法引用后,函数式编程范式彻底改变了Java开发者的编码习惯。本文将通过实战案例和深度性能分析,揭示如何在新项目中优雅运用这些特性,同时提供传统代码与函数式代码的对比优化方案。 文章目录 一、Lambda表达式&a…...
2025年常见渗透测试面试题- PHP考察(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 PHP考察 php的LFI,本地包含漏洞原理是什么?写一段带有漏洞的代码。手工的话如何发掘&am…...
【在校课堂笔记】南山 - 第 10 节课 总结
- 第 92 篇 - Date: 2025 - 04 - 10 Author: 郑龙浩/仟墨 【Python 在校课堂笔记】 南山 - 第 10 节课 文章目录 南山 - 第 10 节课一 in –> 存在性测试 - 基础介绍二 in –> 例题 - 火车票 - 使用 in 优化**问题**【代码 - 以前的代码】【代码 - 使用存在性测试 in】 …...
GaussDB ECPG与Oracle Pro_C深度对比:嵌入式SQL开发者的迁移指南
GaussDB ECPG与Oracle Pro*C深度对比:嵌入式SQL开发者的迁移指南 一、体系架构差异 关键组件对比表 二、语法兼容性分析 核心语法差异对比 c /* Pro*C示例 */ EXEC SQL SELECT empno INTO :emp_id FROM employees WHERE ename :name;/* ECPG等效实现 */ EXEC…...
debian系统中文输入法失效解决
在 Debian 9.6 上无法切换中文输入法的问题通常与输入法框架(如 Fcitx 或 IBus)的配置或依赖缺失有关。以下是详细的解决步骤: 1. 安装中文语言包 确保系统已安装中文语言支持: sudo apt update sudo apt install locales sudo…...
2025年危化品安全管理人员备考指南|智能题库+核心考点解析
作为危化品生产单位安全管理人员(主要负责人),考试内容主要涵盖三大模块: 法律法规体系 《安全生产法》修订要点(2023版) 危险化学品重大危险源辨识标准(GB 18218) 最新《化工过…...
我为女儿开发了一个游戏网站
大家好,我是星河。 自从协助妻子为女儿开发了算数射击游戏后,星河就一直有个想法:为女儿打造一个专属的学习游戏网站。之前的射击游戏虽然有趣,但缺乏难度分级,无法根据女儿的学习进度灵活调整。而且,仅仅…...
SpringBoot企业级开发之【用户模块-更新用户基本信息】
接口文档: 开发前我们先看一下接口文档: 这是实现的预想结果: 实现思路: 设计一下我们的实现思路 拿起家伙实操: 1.controller 定义一个方法去修改用户: 注意!是【put请求】 //更改用户信…...
循环神经网络 - 长短期记忆网络的门控机制
长短期记忆网络(LSTM)的门控机制是其核心设计,用来解决普通 RNN 在长程依赖中遇到的梯度消失与信息混淆问题。为了更进一步理解长短期记忆网络,本文我们来深入分析一下其门控机制。 一、理解长短期记忆网络的“三个门” 所谓门控…...
AutoKeras 处理图像回归预测
AutoKeras 是一个自动机器学习库,在处理图像回归预测问题时,它可以自动选择最佳的模型架构和超参数,从而简化深度学习模型的构建过程。 AutoKeras 主要用于分类和回归任务,它同样可以进行图像数据的回归预测。 步骤 1: 安装 Auto…...
批量清空图片的相机参数、地理位置等敏感元数据
我们在使用相机或者手机拍摄照片的时候,照片中都会带有一些敏感元数据信息,比如说相机的型号,参数,拍摄的时间地点等等。这些信息虽说不是那么引人注意,但是在某些时候他是非常隐私非常重要的。如果我们将这些信息泄露…...
驱动-字符设备驱动框架
简要了解 字符设备驱动框架 整个流程 文章目录 基本知识:实际应用效果说明 参考资料字符设备驱动框架基本结构关键数据结构 - 文件操作结构体(file_operations)struct module *ownerssize_t (*read) (struct file *, char __user *, size_t, loff_t *);ssize_t (*wr…...
RK3588芯片NPU的使用:Windows11 Docker中运行PPOCRv4例子
本文的目标 本文将在RKNN Docker环境中练习PPOCR示例,并通过adb工具部署到RK3588开发板。 开发环境说明 主机系统:Windows11目标设备:搭载RK3588芯片的安卓开发板核心工具:包含rknn-toolkit2、rknn_model_zoo等工具的Docker镜像…...
88.高效写入文件—StringBuilder C#例子 WPF例子
在处理文件写入操作时,选择合适的方法可以显著影响程序的性能。本文将通过两个示例代码,对比使用 StringBuilder 和直接写入文件的性能差异,并提供具体的实现步骤。 问题背景 在实际开发中,我们经常需要将大量数据写入文件。然而…...
redis 延迟双删
Redis延迟双删是一种用于解决缓存与数据库数据一致性问题的策略,通常在高并发场景下使用。以下是其核心内容: 1. 问题背景 当更新数据库时,如果未及时删除或更新缓存,可能导致后续读请求仍从缓存中读取旧数据,造成数…...
如何在CentOS部署青龙面板并实现无公网IP远程访问本地面板
青龙面板的功能多多,可以帮助我们自动化处理很多需要手动操作的事情,比如京东领京豆,阿里云盘签到白嫖 vip、掘金签到等等,本教程使用 Docker 搭建青龙面板,并结合 cpolar 内网穿透实现使用公网地址远程访…...
VectorBT量化入门系列:第五章 VectorBT性能评估与分析
VectorBT量化入门系列:第五章 VectorBT性能评估与分析 本教程专为中高级开发者设计,系统讲解VectorBT技术在量化交易中的应用。通过结合Tushare数据源和TA-Lib技术指标,深度探索策略开发、回测优化与风险评估的核心方法。从数据获取到策略部署…...
新能源商用车能耗终极优化指南:悬架、制动、电驱桥全链路硬核拆解(附仿真代码)
引言:新能源商用车的“续航战争”与工程师的破局点 1.1 行业现状:政策红利与技术瓶颈的博弈 数据冲击: 2023年中国新能源商用车销量突破50万辆,但平均续航仅为燃油车的55%(数据来源:中汽协)。…...
Maven笔记
Maven作用 依赖管理、版本控制标准化项目结构、自动化构建项目生命周期管理细分项目模块自动化构建、通过插件拓展构建过程 Maven下载及配置 https://blog.csdn.net/qq_29689343/article/details/135566775 使用IDEA 构建Maven工程 https://blog.csdn.net/qq_29689343/art…...
Java——接口扩展
JDK8开始接口中新增的方法 JDK7以前:接口中只能定义抽象方法。 JDK8的新特性:接口中可以定义有方法体的方法。(默认、静态) JDK9的新特性:接口中可以定义私有方法。 默认方法 需要使用关键字default修饰 作用: 解决接口升级的问题 接口中默认方法的定义格式: 格式: public d…...
COD任务论文--MAMIFNet
摘要 提示:论文机翻 由于难以从复杂背景中区分高度相似的目标,伪装物体检测(COD)仍然是计算机视觉领域的一项具有挑战性的任务。现有的伪装物体检测方法往往在场景理解和信息利用方面存在困难,导致精度不足,…...
基于MCP协议调用的大模型agent开发04
目录 MCP客户端Client开发流程 uv工具 uv安装流程 uv的基本用法介绍 MCP极简客户端搭建流程 MCP客户端接入OpenAI、DeepSeek在线模型流程 参考来源及学习推荐: Anthropic MCP发布通告:https://www.anthropic.com/news/model-context-protocol MC…...
ComfyUI_Echomimic部署问题集合
本博客总结自己在从WebUI转到ComfyUI的过程配置Echomimic遇到的一些问题和解决方法。 默认大家已经成功安装ComfyUI,我之前装的是ComfyU桌面版,现在用的是B站秋葉大佬的整合包。但内核都一样,错误也是通用的。遇到问题时,应该先去…...
音频转文本:如何识别音频成文字
Python脚本:MP4转MP3并语音识别为中文 以下是一个完整的Python脚本,可以将MP4视频转换为MP3音频,然后使用语音识别模型将音频转换为中文文本。 准备工作 首先需要安装必要的库: pip install moviepy pydub SpeechRecognition openai-whisper完整脚本 import os from m…...
脑科学与人工智能的交叉:未来智能科技的前沿与机遇
引言 随着科技的迅猛发展,脑科学与人工智能(AI)这两个看似独立的领域正在发生深刻的交汇。脑机接口、神经网络模型、智能机器人等前沿技术,正带来一场跨学科的革命。这种结合不仅推动了科技进步,也在医疗、教育、娱乐等…...
Linux | I.MX6ULL外设功能验证(11)
01 CSI 摄像头测试 I.MX6ULL 终结者开发板引出了一路 CSI 的摄像头接口,支持【007】的 OV5640 摄像头模块。首先我们连接OV5640 摄像头模块到开发板上,如下图所示(大家在连接的时候一定要注意方向,摄像头朝向开发板的内侧,千万不要接反):...
AI助手:Claude
一、简介 Claude 是由 Anthropic 公司开发的一款人工智能助手,类似于 OpenAI 的 ChatGPT。它以 Anthropic 提出的“宪法式 AI(Constitutional AI)”为核心设计理念,强调安全性、透明性和可控性。以下是对 Claude 的一个简要介绍&…...
vue项目proxy代理的方式
以下是一个详细的 Vue 项目配置 Proxy 代理 的示例和说明,用于解决开发环境跨域问题: 1. 基础代理配置 vue.config.js 配置文件 // vue.config.js module.exports {devServer: {proxy: {// 代理所有以 /api 开头的请求/api: {target: http://localhos…...
多项目并行时如何避免资源冲突
多项目并行时避免资源冲突需做到:精确的资源规划与调度、建立统一的资源管理体系、设置清晰的优先级策略、实时监控资源使用状况、优化团队沟通与协调。其中,精确的资源规划与调度尤其重要,它决定了项目资源能否高效利用,防止资源…...
求x的c(n,m)次方
近期看到一类很有趣的题啊,其最基础的表现形式为求 mod P的值。 所以我们来拿一道小例题讲讲。 题面:给定 x,n,m,求: mod 1000003471的值。 首先我们注意到,题目给定的模数1000003471为质数,根据费马…...
VS Code 的 .S 汇编文件里面的注释不显示绿色
1. 确认文件语言模式 打开 .S 文件后,查看 VS Code 右下角的状态栏,确认当前文件的识别模式(如 Assembly、Plain Text 等)。如果显示为 Plain Text 或其他非汇编模式: 点击状态栏中的语言模式(如 Plain Te…...
Apipost自定义函数深度实战:灵活处理参数值秘籍
在开发过程中,为了更好地处理传递给接口的参数值,解决在调试过程中的数据处理问题,我们经常需要用到函数处理数据。 过去,我们通过预执行脚本来处理数据,先添加脚本,然后将处理后的结果再赋值给请求参数。…...
ADI的BF561双核DSP怎么做开发,我来说一说(十)驱动直流电机和步进电机
作者的话 ADI的双核DSP,最早的一颗是Blackfin系列的BF561,这颗DSP我用了很久,比较熟悉,且写过一些给新手的教程。 硬件准备 ADZS-BF561-EZKIT开发板:ADI原厂评估板 AD-ICE20000仿真器:ADI现阶段性能最好…...
JS包装类型Object
包装类型 1 对象 Object 声明普通对象 学习静态方法,只能由Object自己调用 1.获得所有属性 2.获得所有属性值 3.对象拷贝...
【C++初阶】--- vector容器功能模拟实现
1.什么是vector? 在 C 里,std::vector 是标准模板库(STL)提供的一个非常实用的容器类,它可以看作是动态数组 2.成员变量 iterator _start;:指向 vector 中第一个元素的指针。 iterator _finish;&#x…...
FreeRTOS项目工程完善指南:STM32F103C8T6系列
FreeRTOS项目工程完善指南:STM32系列 本文是FreeRTOS STM32开发系列教程的一部分。我们将完善之前移植的FreeRTOS工程,添加串口功能并优化配置文件。 更多优质资源,请访问我的GitHub仓库:https://github.com/Despacito0o/FreeRTO…...
多值字典表设计:优雅处理一对多关系的数据库方案
在数据库设计中,我们经常需要处理一对多的关系数据。传统做法是创建关联表,但有时这种方式会显得过于复杂。今天,我将分享一种简单而实用的多值字典表设计方案,它适用于那些不需要对单个值进行复杂操作的场景。 为什么需要多值字典表? 在许多应用场景中,我们需要存储一…...
如何在Linux系统Docker部署Dashy并远程访问内网服务界面
## 简介 Dashy 是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起,形成自己的导航页。一款功能超强大,颜值爆表的可定制专属导航页工…...