每日算法-250511

每日算法 - 250511

记录一下今天刷的几道LeetCode题目,主要是关于贪心算法和数组处理。

1221. 分割平衡字符串

题目
在这里插入图片描述

思路

贪心

解题过程

我们可以遍历一次字符串,维护一个计数器 balance。当遇到字符 'L' 时,balance 增加;当遇到字符 'R' 时,balance 减少。当 balance 的值回到 0 时,说明从上一个平衡点(或字符串开头)到当前位置的 'L''R' 字符数量相等,即找到了一个平衡字符串,此时结果 ret 加一。

复杂度

  • 时间复杂度: O ( N ) O(N) O(N), N为字符串长度。
  • 空间复杂度: O ( N ) O(N) O(N), 因为 ss.toCharArray() 创建了一个新的字符数组。如果只考虑额外空间(不包括输入转换),则为 O ( 1 ) O(1) O(1)

Code

class Solution {public int balancedStringSplit(String ss) {int ret = 0;char[] s = ss.toCharArray();int balance = 0; // Renamed sum to balance for clarityfor (int i = 0; i < s.length; i++) {if (s[i] == 'L') {balance++;} else { // s[i] == 'R'balance--;}if (balance == 0) {ret++;}}return ret;}
}

2405. 子字符串的最优划分

题目
在这里插入图片描述

思路

贪心

解题过程

我们遍历字符串,目标是让每个子字符串尽可能长,同时确保其中没有重复字符。
使用一个频率数组 map (或哈希集合) 来追踪当前子字符串中已出现的字符。
遍历字符串中的每个字符:

  1. 如果当前字符在 map 中已标记为出现过,则表示当前子字符串到此为止(不包括当前字符)是一个有效的划分。我们让结果 ret 增加,并重置 map (清空频率记录),然后将当前字符加入新的子字符串(即标记其在 map 中出现)。
  2. 如果当前字符未在 map 中出现过,则将其加入当前子字符串(标记其在 map 中出现),并继续扩展。
    初始时,ret 为 1,因为至少会有一个子字符串。

复杂度

  • 时间复杂度: O ( N ) O(N) O(N), N为字符串长度。遍历字符串一次,Arrays.fill 操作作用于固定大小 (26) 的数组,是 O ( 1 ) O(1) O(1) 操作。
  • 空间复杂度: O ( N ) O(N) O(N)

Code

class Solution {public int partitionString(String ss) {char[] s = ss.toCharArray();int[] map = new int[26];int ret = 1;for (char c : s) {if (++map[c - 'a'] > 1) {ret++;Arrays.fill(map, 0);map[c - 'a']++;}}return ret;}
}

2294. 划分数组使最大差为 K

题目
在这里插入图片描述

思路

贪心

解题过程

想要获得最少的子序列(子数组在题目中指子序列,因为元素顺序可以打乱后分组),我们就希望每个子序列尽可能包含更多的元素,同时满足最大差不超过 K 的条件。

  1. 对数组 nums进行排序。这样,具有相似数值的元素会聚集在一起。
  2. 初始化子序列数量 ret = 1(因为至少有一个子序列)。
  3. 将排序后数组的第一个元素设为当前子序列的最小值 minVal
  4. 遍历排序后的数组,从第二个元素开始。对于每个元素 x
    • 如果 x - minVal > k,则当前元素 x 不能包含在当前子序列中。因此,我们必须开始一个新的子序列。让 ret 增加,并将 minVal 更新为当前元素 x(它将是新子序列的第一个也是最小的元素)。
    • 如果 x - minVal <= k,则当前元素 x 可以包含在当前子序列中,我们继续。minVal 保持不变,因为它是当前子序列的固定最小值。
      为什么可以排序?我们关心的是子序列里的最大值和最小值的差值,这和原始顺序无关。题目要求返回的是最少子序列的个数,而不是子序列本身。所以可以排序。

复杂度

  • 时间复杂度: O ( N log ⁡ N ) O(N \log N) O(NlogN), 主要由排序决定。遍历是 O ( N ) O(N) O(N)
  • 空间复杂度: O ( log ⁡ N ) O(\log N) O(logN) or O ( 1 ) O(1) O(1), 取决于排序算法实现所使用的栈空间或是否为原地排序。Java的Arrays.sort()对于基本类型数组通常是快速排序的变体,会使用 O ( log ⁡ N ) O(\log N) O(logN) 的栈空间。

Code

class Solution {public int partitionArray(int[] nums, int k) {if (nums == null || nums.length == 0) {return 0;}Arrays.sort(nums);int ret = 1;int minVal = nums[0]; for (int x : nums) {if (x - minVal > k) {ret++;minVal = x; }}return ret;}
}

154. 寻找旋转排序数组中的最小值 II

题目
在这里插入图片描述

这是第二次写这道题,这次写的还不错,就不再多说了,详细题解见每日算法-250415

Code

class Solution {public int findMin(int[] nums) {int left = 0, right = nums.length - 1;while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] == nums[right]) {right--;} else if (nums[mid] > nums[right]) {left = mid + 1;} else {right = mid;}}return nums[left];}
}

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

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

相关文章

Keepalived + LVS + Nginx 实现高可用 + 负载均衡

目录 Keepalived Keepalived 是什么&#xff08;高可用&#xff09; 安装 Keepalived LVS LVS 是什么&#xff08;负载均衡&#xff09; 安装 LVS Keepalived LVS Nginx 实现 高可用 负载均衡 Keepalived Keepalived 是什么&#xff08;高可用&#xff09; Keepaliv…

【杂谈】-DeepSeek-GRM:让AI更高效、更普及的先进技术

DeepSeek-GRM&#xff1a;让AI更高效、更普及的先进技术 文章目录 DeepSeek-GRM&#xff1a;让AI更高效、更普及的先进技术1、DeepSeek-GRM&#xff1a;先进的AI框架解析2、DeepSeek-GRM&#xff1a;AI开发的变革之力3、DeepSeek-GRM&#xff1a;广泛的应用前景4、企业自动化解…

【MySQL】页结构详解:页的大小、分类、头尾信息、数据行、查询、记录及数据页的完整结构

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…

【FreeRTOS】基于G431+Cubemx自用笔记

系列文章目录 留空 文章目录 系列文章目录前言一、从头开始创建一个FreeRTOS工程1.1 在 "Timebase Source" 中&#xff0c;选择其他TIM1.2 配置FreeRTOS的参数1. 3 添加任务 二、动态任务的创建/删除2.1 函数介绍2.1.1 创建动态任务xTaskCreate()2.1.2 创建静态任务…

LVGL(lv_bar进度条)

文章目录 一、lv_bar 是什么&#xff1f;二、基本使用创建一个进度条设置进度值 三、条形方向与填充方向四、范围模式&#xff08;Range&#xff09;五、事件处理&#xff08;可选&#xff09;六、自定义样式&#xff08;可选&#xff09;七、综合示例八、配合 lv_timer 或外部…

AI对话小技巧

角色设定&#xff1a;擅于使用 System 给 GPT 设定角色和任务&#xff0c;如“哲学大师"指令注入&#xff1a;在 System 中注入常驻任务指令&#xff0c;如“主题创作"问题拆解&#xff1a;将复杂问题拆解成的子问题&#xff0c;分步骤执行&#xff0c;如&#xff1a…

C++ 核心基础:数字、数组、字符串、指针与引用详解

C++ 核心基础:数字、数组、字符串、指针与引用详解 1. C++ 基础语法1.1 标识符与保留字1.2 数据类型概述1.3 基本输入输出2.1 基本整数类型(int、short、long、long long)2.2 无符号整数类型(unsigned int、unsigned short、unsigned long、unsigned long long)2.3 整数类…

HarmonyOS运动开发:如何集成百度地图SDK、运动跟随与运动公里数记录

前言 在开发运动类应用时&#xff0c;集成地图功能以及实时记录运动轨迹和公里数是核心需求之一。本文将详细介绍如何在 HarmonyOS 应用中集成百度地图 SDK&#xff0c;实现运动跟随以及运动公里数的记录。 一、集成百度地图 SDK 1.引入依赖 首先&#xff0c;需要在项目的文…

如何理解k8s中的controller

一、基本概念 在k8s中&#xff0c;Controller&#xff08;控制器&#xff09;是核心组件之一&#xff0c;其负责维护集群状态并确保集群内的实际状态与期望状态一致的一类组件。控制器通过观察集群的当前状态并将其与用户定义的期望状态进行对比&#xff0c;做出相应的调整来实…

《Go小技巧易错点100例》第三十二篇

本期分享&#xff1a; 1.sync.Map的原理和使用方式 2.实现有序的Map sync.Map的原理和使用方式 sync.Map的底层结构是通过读写分离和无锁读设计实现高并发安全&#xff1a; 1&#xff09;双存储结构&#xff1a; 包含原子化的 read&#xff08;只读缓存&#xff0c;无锁快…

【MySQL】行结构详解:InnoDb支持格式、如何存储、头信息区域、Null列表、变长字段以及与其他格式的对比

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…

LabVIEW多通道并行数据存储系统

在工业自动化监测、航空航天测试、生物医学信号采集等领域&#xff0c;常常需要对多个传感器通道的数据进行同步采集&#xff0c;并根据后续分析需求以不同采样率保存特定通道组合。传统单线程数据存储方案难以满足实时性和资源利用效率的要求&#xff0c;因此设计一个高效的多…

【Linux系列】bash_profile 与 zshrc 的编辑与加载

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

针对Mkdocs部署到Githubpages加速访问速度的一些心得

加速网站访问的一些心得 在使用 MkDocs 构建网站时&#xff0c;为了提高访问速度&#xff0c;我们可以采取以下一些措施&#xff1a; 1. 优化图片 使用合适的图片格式&#xff0c;如 WebP、JPEG2000 等&#xff0c;减少图片文件大小&#xff0c;从而加快加载速度。 可以使用…

Mysql中切割字符串作为in的查询条件

问题&#xff1a;需要将一个字符串切割成数组作为in的查询条件&#xff0c;如&#xff1a; select * from table_1 where name in (select slit(names) from table_2 where id 3); names 返回的格式是’name1,name2,name3…,需要将name按照逗号切割作为in的查询条件&#xff1b…

云计算中的虚拟化:成本节省、可扩展性与灾难恢复的完美结合

云计算中虚拟化的 4 大优势 1. 成本效益 从本质上讲&#xff0c;虚拟化最大限度地减少了硬件蔓延。团队可以将多个虚拟机整合到单个物理主机上&#xff0c;而不是为每个工作负载部署单独的服务器。这大大减少了前期硬件投资和持续维护。 结果如何&#xff1f;更低的功耗、更低…

Linux : 多线程【线程概念】

Linux &#xff1a; 多线程【线程概念】 &#xff08;一&#xff09;线程概念线程是什么用户层的线程linux中PID与LWP的关系 (二) 进程地址空间页表(三) 线程总结线程的优点线程的缺点线程异常线程用途 &#xff08;一&#xff09;线程概念 线程是什么 在一个程序里的一个执行…

IDEA转战TREA AI IDE : springboot+maven+vue项目配置

一、trea下载安装 Trae官方网址&#xff1a; https://www.trae.com.cn/ Trae官方文档&#xff1a;https://docs.trae.com.cn/docs/what-is-trae?_langzh w3cschool&#xff1a; https://www.w3cschool.cn/traedocs/ai-settings.html 安装这里省略&#xff0c;正常安装即可。…

Java--图书管理系统(简易版)

目录 目录 前言 &#x1f514;1.library包 1.1 Book类 1.2 BookList类 &#x1f514;2.user包 2.1User类(父类) 2.2Admin(管理员) 2.3 NormalUser(普通用户) &#x1f514;3.Operation包 &#x1f550;3.1 IOperation接口 &#x1f551;3.2ListOperation(查看操作)…

深入浅出:Spring Boot 中 RestTemplate 的完整使用指南

在分布式系统开发中&#xff0c;服务间通信是常见需求。作为 Spring 框架的重要组件&#xff0c;RestTemplate 为开发者提供了简洁优雅的 HTTP 客户端解决方案。本文将从零开始讲解 RestTemplate 的核心用法&#xff0c;并附赠真实地图 API 对接案例。 一、环境准备 在 Spring…