力扣爆刷第166天之TOP100五连刷96-100(单词拆分、回溯、旋转数组)
力扣爆刷第166天之TOP100五连刷96-100(单词拆分、回溯、旋转数组)
文章目录
- 力扣爆刷第166天之TOP100五连刷96-100(单词拆分、回溯、旋转数组)
- 一、24. 两两交换链表中的节点
- 二、139. 单词拆分
- 三、560. 和为 K 的子数组
- 四、209. 长度最小的子数组
- 五、153. 寻找旋转排序数组中的最小值
一、24. 两两交换链表中的节点
题目链接:https://leetcode.cn/problems/swap-nodes-in-pairs/description/
思路:要求把相邻的节点两两交换,不能只交换值,其实对于这种交换类型的题目很简单,只需要维护3个或者4个指针,指针①维护要交换的两个节点的前一个节点,这个属于前驱节点,避免断线了,指针②指向第一个要交换的节点,指针③指向第二个要交换的节点,指针②和指针③负责交换节点,指针④用来记录后继节点,所以思路就清晰了,只需要②③节点进行交换,①④维护两个端点,每交换完一组后,指针向后移动就行。
class Solution {public ListNode swapPairs(ListNode head) {if(head == null || head.next == null) return head;ListNode root = new ListNode(-1, head);ListNode pro = root, cur = head, pre = null;while(cur != null && cur.next != null) {pre = cur.next.next;pro.next = cur.next;cur.next.next = cur;cur.next = pre;pro = cur;cur = pre;}return root.next;}
}
二、139. 单词拆分
题目链接:https://leetcode.cn/problems/word-break/description/
思路:单词拆分,问一个单词字典能否拼成一个字符串,要求单词可以不全使用,单个单词可以重复使用,从这几点可以看出,本题是一个完全背包问题,问的就是能不能把背包装满,对于完全背包,在不求排列数和组合数的情况下,物品和背包不讲究向后遍历顺序,而且都是正序,那么定义dp[i]表示以s[0, i]区间的字符串可以被拼接成功,那么就可以找到递推规律,只要在前一个位置可以拼成,然后比较后面的区间,如果相同即可拼成。
class Solution {public boolean wordBreak(String s, List<String> wordDict) {boolean[] dp = new boolean[s.length()+1];dp[0] = true;for(int i = 0; i < s.length(); i++) {for(String t : wordDict) {int k = t.length();if(k > i+1 || dp[i+1] || !dp[i+1-k]) continue;if(isEquals(s, t, i+1-k, i)) {dp[i+1] = true;}}}return dp[s.length()];}boolean isEquals(String s, String t, int left, int right) {int i = 0;while(left <= right && i < t.length()) {if(s.charAt(left) != t.charAt(i)) return false;left++;i++;}return true;}}
三、560. 和为 K 的子数组
题目链接:https://leetcode.cn/problems/subarray-sum-equals-k/
思路:本题要求求和为K的子数组,要求子数组连续,其实如果子数组不连续让求子序列,直接回溯就可以做。但是现在子数组连续,这种情况下可以考虑前缀和,遍历数组的过程中用map记录前缀和出现的次数,然后对于每一个前缀和都尝试去减k,看看对应的前缀和是否存在,如果存在,则说明一定有和为k的子数组,与上一个前缀和相加,得到当前的前缀和。此时计数即可。
class Solution {public int subarraySum(int[] nums, int k) {Map<Integer, Integer> map = new HashMap<>();map.put(0, 1);int count = 0, preSum = 0;for(int i = 0; i < nums.length; i++) {preSum += nums[i];if(map.containsKey(preSum-k)) {count += map.get(preSum-k);}map.put(preSum, map.getOrDefault(preSum, 0)+1);}return count;}
}
四、209. 长度最小的子数组
题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/description/
思路:求和为k的长度最小的子数组,这种类型一看就是滑动窗口,不停的扩大右边界,直到出发条件,然后记录长度,然后缩小左边界,直到不再满足条件,然后再重新扩大右边界。
class Solution {public int minSubArrayLen(int target, int[] nums) {int left = 0, right = 0, sum = 0, min = Integer.MAX_VALUE;while(right < nums.length) {sum += nums[right++];while(sum >= target) {min = Math.min(min, right - left);sum -= nums[left++];}}return min == Integer.MAX_VALUE ? 0 : min;}
}
五、153. 寻找旋转排序数组中的最小值
题目链接:https://leetcode.cn/problems/find-minimum-in-rotated-sorted-array/description/
思路:本题说的是数组旋转若干次之后求数组中的最小值,因为原数组是升序的且无重,无论旋转多少次,最后数组只能是两种形态,要么单调递增,要么分段递增,那么就很简单,先排除第一种,如果右边界的值大于左边界就可以说明是单调递增的,那么剩下的就都是分段递增了,对于分段递增,采用二分法,如果二分之后的中值大于nums[0]说明中值位于左分段,最小值在右区间,如果二分之后的中值小于nums[0]则说明最小值位于左区间。然后以此往复一直寻找就可以。

class Solution {public int findMin(int[] nums) {int len = nums.length;if(nums[len-1] >= nums[0]) return nums[0];int left = 0, right = len - 1;while(left <= right) {int mid = left + (right - left) / 2;if(nums[mid] < nums[0]) {right = mid-1;}else{left = mid+1;}}return nums[left];}
}
相关文章:
力扣爆刷第166天之TOP100五连刷96-100(单词拆分、回溯、旋转数组)
力扣爆刷第166天之TOP100五连刷96-100(单词拆分、回溯、旋转数组) 文章目录 力扣爆刷第166天之TOP100五连刷96-100(单词拆分、回溯、旋转数组)一、24. 两两交换链表中的节点二、139. 单词拆分三、560. 和为 K 的子数组四、209. 长…...
2024在线PHP加密网站源码
源码介绍 2024在线PHP加密网站源码 更新内容: 1.加强算法强度 2.优化模版UI 加密后的代码示例截图 源码下载 https://download.csdn.net/download/huayula/89568335...
网络驱动移植(RTL8189)
1、把驱动放到内核文件夹中(linux/drivers/net/wireless),对应的驱动可以在网上下载 2、修改该目录下的Kconfig和Makefile文件 3、配置内核(make menuconfig) 配置支持IEEE 802.11,选中8189模块࿰…...
go语言中map学习
在 Go 语言中,map 是一种引用类型,这意味着它有以下特点: 内存结构: map 实际上是一个指向底层数据结构的指针。这个底层数据结构包含键值对的集合。 赋值与传参: 当你给一个变量赋值一个 map 时,或者将 map 作为函数参数传递时,实际上传递的是指针,而不是完整的数据结构副本。…...
【C#】| 与 及其相关例子
按位或(|) 按位或运算符 | 对两个数的每一位进行比较,如果两个数中至少有一个为 1,则结果位为 1;否则,结果位为0。 1010 (10 in decimal) | 1100 (12 in decimal) ------1110 (14 in decimal) 力扣相关…...
【数据结构 | 哈希表】一文了解哈希表(散列表)
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...
go创建对象数组
在 Go 语言中,可以使用字面量的方式创建结构体对象数组。以下是一个示例代码,展示了如何使用字面量创建一个结构体对象数组: package mainimport "fmt"// 定义一个结构体 type Person struct {Name stringAge intAddress Address…...
Golang | Leetcode Golang题解之第278题第一个错误的版本
题目: 题解: func firstBadVersion(n int) int {return sort.Search(n, func(version int) bool { return isBadVersion(version) }) }...
自动化网络爬虫:如何它成为提升数据收集效率的终极武器?
摘要 本文深入探讨了自动化网络爬虫技术如何彻底改变数据收集领域的游戏规则,揭示其作为提升工作效率的终极工具的奥秘。通过分析其工作原理、优势及实际应用案例,我们向读者展示了如何利用这一强大工具加速业务决策过程,同时保持数据收集的…...
软件测试---测试需求分析
课程目标 什么是软件测试需求 软件测试需求的必要性 如何对软件测试需求进行分析(重点) 课程补充 灰度测试(基于功能):先发布部分功能,然后看用户的反馈,再去发布另外一部分的功能更新。 A/B测…...
Android11 framework 禁止三方应用通过广播开机自启动-独立方案
之前的文章Android11 framework 禁止三方应用开机自启动记录了我调试Android11应用自启动限制的全过程,但是之前的方案感觉还能再研究,所以有了这一篇文章。 这一篇文章主要探讨Android11上,以广播来进行自启动的应用的限制,极个别…...
Node:解决Error: error:0308010C:digital envelope routines::unsupported的解决方法
问题描述 在使用vuepress搭建博客的时候,运行项目发现报错了,检查了node的版本是18,之前用的是16或14的版本,现在报:Error: error:0308010C:digital envelope routines::unsupported错误。 查找了一些资料࿰…...
spring boot(学习笔记第十四课)
spring boot(学习笔记第十四课) Spring Security的密码加密,基于数据库认证 学习内容: Spring Security的密码加密基于数据库认证 1. Spring Security的密码加密 如果用户的密码保存在数据库中是以明文保存,对于公司的安全将是灾难性的&…...
Android 11 Unable to start/bind service
今天在Android11上发现了一个的问题,如果目标Service的进程没有启动,那么无论是bindService还是startService都没有办法拉起指定的Service。 网上查了很多资料如下: 1.目标Service 设置 android:exported"true" 2.目标Service需要声明自定义权…...
走难而正确的路并持之以恒
走难而正确的路并持之以恒 接近八月,台风频繁。气象台说台风“格美”今夜将至,往粤北走,而留在粤东的将是持续的高温。高温的广州,这几晚的天空惊喜不断,成片的火烧云,站在猎德大桥观望,丹红的凤…...
规范:Redis规范
在公司项目中,redis属于高频使用,在使用中,我们遇到了各种各样的redis问题,于是针对自身情况梳理了一个redis使用规范。 一、键名设计 1、key名设计 1. 禁止包含特殊字符(比如空格、换行、单双引号以及其他转义字符) 2. 建议以…...
比较 WordPress 、 Baklib 和 BetterDocs
对于希望管理其产品和服务的在线文档或知识库以支持其客户和员工的组织来说,市场上有太多的平台和工具。一些组织使用 WordPress 作为 Web 内容管理,并打算使用可用的插件。如果您是这样的组织之一,正在考虑使用广泛使用的 WordPress 插件之一…...
Redis 哨兵搭建
Redis哨兵(sentinel)搭建 7.2.5 文章目录 一、单节点哨兵1. 环境介绍2. 环境前准备工作3. 安装 Redis 7.2.54. redis 配置修改并且启动4.1 修改配置文件4.2 编写启动脚本 5. 开启主从5.1 开启5.2 主库实例查看主从信息 6. 创建sentinel的配置文件并启动6.1 创建配置文件6.2 启…...
HackTheBox--Knife
Knife 测试过程 1 信息收集 端口扫描 80端口测试 echo "10.129.63.56 knife.htb" | sudo tee -a /etc/hosts网站是纯静态的,无任何交互功能,检查网页源代码也未发现任何可利用的文件。 检查页面请求时,请求与响应内容࿰…...
Linux_实现TCP网络通信
目录 1、实现服务器的逻辑 1.1 socket 1.2 bind 1.3 listen 1.4 accept 1.5 read 1.6 write 1.7 服务器代码 2、实现客户端的逻辑 2.1 connect 2.3 客户端代码 3、实现服务器与客户端的通信 结语 前言: 在Linux下,实现传输层协议为TCP…...
图表数据提取的智能转换革命:从像素到数据点的精准跨越
图表数据提取的智能转换革命:从像素到数据点的精准跨越 【免费下载链接】WebPlotDigitizer WebPlotDigitizer: 一个基于 Web 的工具,用于从图形图像中提取数值数据,支持 XY、极地、三角图和地图。 项目地址: https://gitcode.com/gh_mirror…...
Hunyuan-HY-MT1.8B性能报告解读:380ms处理500token实测
Hunyuan-HY-MT1.8B性能报告解读:380ms处理500token实测 1. 测试背景与模型简介 腾讯混元团队最新发布的HY-MT1.5-1.8B翻译模型,以其轻量级架构和卓越性能引起了广泛关注。这个仅有18亿参数的模型,在保持高质量翻译效果的同时,实…...
3步打造你的专属阅读系统:开源工具如何重构数字阅读体验
3步打造你的专属阅读系统:开源工具如何重构数字阅读体验 【免费下载链接】legado-Harmony 开源阅读鸿蒙版仓库 项目地址: https://gitcode.com/gh_mirrors/le/legado-Harmony 你是否曾遇到这样的困扰:阅读APP充斥广告弹窗、书源受限无法找到心仪内…...
Java初学者项目需要哪些技术?
对于Java初学者,以下技术栈组合既能满足学习需求,又能完成完整项目开发:核心基础Java语法基础掌握变量、循环、条件语句面向对象三大特性:封装、继承、多态集合框架:$ArrayList$、$HashMap$等异常处理机制开发工具IDE&…...
手把手教你用YOLOv5训练自己的交通标志数据集(从LabelImg标注到模型部署)
从零构建YOLOv5交通标志检测器的实战指南 在自动驾驶和智能交通系统快速发展的今天,准确识别道路标志已成为计算机视觉领域的重要应用场景。不同于传统图像处理方法,基于深度学习的目标检测技术能够适应复杂环境变化,而YOLOv5以其卓越的速度-…...
参数估计实战:从置信区间构建到样本量计算的完整指南
1. 参数估计的核心逻辑:从抽样到推断 第一次接触参数估计时,我盯着那个95%置信区间看了半小时——它既不像天气预报的降水概率,也不像考试分数的百分比排名。后来在分析用户行为数据时才恍然大悟:参数估计本质是用样本数据给总体参…...
AceMenu:嵌入式轻量级菜单框架设计与实践
1. AceMenu 库概述:面向嵌入式人机交互的轻量级菜单框架AceMenu 是一个专为资源受限嵌入式系统设计的轻量级、可移植菜单管理库。其核心设计哲学是“以最少的硬件资源开销,实现最直观的用户导航体验”。不同于通用 GUI 框架(如 LVGL 或 Touch…...
36 Python 时序和文本:中文文本处理入门:为什么要先做分词和停用词过滤?
中文文本处理入门:为什么要先做分词和停用词过滤? 刚接触文本分析时,很多人都会有一个疑问: 文本明明已经有内容了,为什么不能直接拿去做分类、聚类或者情感分析? 这个问题其实正好指向了文本挖掘里最基础、…...
快充、便携、安全兼备,Anker能量盒到底香不香?
随着无线互联网时代的到来,移动设备的续航问题成为人们的新烦恼。无论是频繁出差、旅行,还是移动办公,充电宝几乎已经成为随身必备的装备。 然而,传统充电宝往往存在充电速度慢、体积笨重、功能单一,甚至安全认证不完善…...
用Arduino UNO R3和面包板,从零组装你的第一台meArm机械臂(附电源模块避坑指南)
用Arduino UNO R3和面包板,从零组装你的第一台meArm机械臂(附电源模块避坑指南) 当你第一次看到meArm机械臂灵活抓取物体的视频时,是否也想过自己动手组装一台?作为开源硬件领域的经典项目,meArm以其精巧的…...
