力扣爆刷第103天之CodeTop100五连刷1-5

力扣爆刷第103天之CodeTop100五连刷1-5

文章目录

      • 力扣爆刷第103天之CodeTop100五连刷1-5
      • 一、3. 无重复字符的最长子串
      • 二、206. 反转链表
      • 三、146. LRU 缓存
      • 四、215. 数组中的第K个最大元素
      • 五、25. K 个一组翻转链表

一、3. 无重复字符的最长子串

题目链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters/description/
思路:求最长无重复子串,典型滑动窗口,用set记录是否重复,无重扩大窗口,有重缩小窗口,每次添加元素后更新最大值。

class Solution {public int lengthOfLongestSubstring(String s) {int max = 0;Set<Character> set = new HashSet<>();int slow = 0;for(int i = 0; i < s.length(); i++) {while(set.contains(s.charAt(i))) {set.remove(s.charAt(slow));slow++;}set.add(s.charAt(i));max = Math.max(max, set.size());}return max;}
}

二、206. 反转链表

题目链接:https://leetcode.cn/problems/reverse-linked-list/description/
思路:翻转链表采用头插法,一个指针指向虚拟头结点保持不动,另一个指针每次向后走,进行头插。

class Solution {public ListNode reverseList(ListNode head) {ListNode root = new ListNode();ListNode p = head;while(p != null) {ListNode pre = p.next;p.next = root.next;root.next = p;p = pre;}return root.next;}
}

三、146. LRU 缓存

题目链接:https://leetcode.cn/problems/lru-cache/description/
思路:非常经典的题目,最近最少使用,我们需要构建一个双向链表和哈希表,其中双向链表应该有虚拟的头结点和尾结点,方便进行添加删除操作,其他的是常规操作。
在这里插入图片描述

class LRUCache {int capacity;Map<Integer, Node> map;DoubleList list;public LRUCache(int capacity) {this.capacity = capacity;map = new HashMap<>();list = new DoubleList();}public int get(int key) {if(!map.containsKey(key)) return -1;Node temp = map.get(key);makeRecently(temp);return temp.value;}public void put(int key, int value) {if(map.containsKey(key)) {Node temp = map.get(key);temp.value = value;makeRecently(temp);return;}if(list.size == capacity) {Node temp = list.deleteFirst();map.remove(temp.key);}Node temp = new Node(key, value);list.add(temp);map.put(key, temp);}void makeRecently(Node temp) {list.delete(temp);list.add(temp);}
}class DoubleList {int size = 0;Node start, end;DoubleList() {start = new Node();end = new Node();start.right = end;end.left = start;}void delete(Node temp) {temp.left.right = temp.right;temp.right.left = temp.left;temp.left = null;temp.right = null;size--;}Node deleteFirst() {if(start.right == end) return null;Node temp = start.right;delete(temp);return temp;}void add(Node temp) {end.left.right = temp;temp.left = end.left;temp.right = end;end.left = temp;size++;}
}class Node{int key, value;Node left, right;Node(){}Node(int k, int v) {key = k;value = v;}
}

四、215. 数组中的第K个最大元素

题目链接:https://leetcode.cn/problems/kth-largest-element-in-an-array/description/
思路:使用快速排序超时,又要求时间复杂度为O(N),使用桶排序最合数不过了。
桶排序:即把所有的数作为索引,放到一个新数组里去,即放到桶里,出现多次即累加,然后从后往前遍历减去次数,即可得到第K个最大的元素。

class Solution {public int findKthLargest(int[] nums, int k) {int[] count = new int[20001];for(int i : nums) {count[i + 10000]++;}for(int i = 20000; i > 0; i--) {k = k - count[i];if(k <= 0) return i - 10000; }return 0;}}

快排:

class Solution {public int findKthLargest(int[] nums, int k) {quickSort(nums, 0, nums.length-1);return nums[nums.length - k];}void quickSort(int[] nums, int left, int right) {if(left >= right) return;int base = nums[left];int i = left, j = right;while(i < j) {while(nums[j] >= base && i < j) j--;while(nums[i] <= base && i < j) i++;swap(nums, i, j);}swap(nums, left, j);quickSort(nums, left, j-1);quickSort(nums, j+1, right);}void swap(int[] nums, int x, int y) {int t = nums[x];nums[x] = nums[y];nums[y] = t;}
}

五、25. K 个一组翻转链表

题目链接:https://leetcode.cn/problems/reverse-nodes-in-k-group/description/
思路:

K个一组翻转,头插法、尾插法都可以,头插法需要虚拟头结点,尾插法不需要。
下面使用头插法。

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode reverseKGroup(ListNode head, int k) {ListNode root = new ListNode(-1, head);ListNode slow = root, fast =head;int i = 0;while(fast != null) {i++;fast = fast.next;if(i % k == 0) {slow = reverse(slow, fast);}}return root.next;}ListNode reverse(ListNode a, ListNode b) {ListNode r = a, p1 = a.next, p2 = p1;r.next = null;while(p1 != b) {ListNode pre = p1.next;p1.next = r.next;r.next = p1;p1 = pre;}p2.next = b;return p2;}}

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

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

相关文章

使用Intellij idea编写Spark应用程序(Scala+Maven)

使用Intellij idea编写Spark应用程序(ScalaMaven) 对Scala代码进行打包编译时&#xff0c;可以采用Maven&#xff0c;也可以采用sbt&#xff0c;相对而言&#xff0c;业界更多使用sbt。这里介绍IntelliJ IDEA和Maven的组合使用方法。IntelliJ IDEA和SBT的组合使用方法&#xf…

docker实践教程,mysql中使用自定义目录实现数据挂载(二)

有一些知识点在docker实践教程&#xff0c;nginx中使用数据卷映射修改前端网页&#xff08;一&#xff09;&#xff0c;就不累述了。 下载mysql的镜像 docker pull mysql创建容器 先去Docker Hub看看mysql是怎么使用的 可知&#xff0c;运行命令为&#xff1a;&#xff08;…

SpringCloud之网关组件Gateway学习

SpringCloud之网关组件Gateway学习 GateWay简介 Spring Cloud Gateway是Spring Cloud的⼀个全新项目&#xff0c;目标是取代Netflix Zuul&#xff0c;它基于Spring5.0SpringBoot2.0WebFlux&#xff08;基于高性能的Reactor模式响应式通信框架Netty&#xff0c;异步⾮阻塞模型…

2024 用CleanMyMac X为您的MAC清理提速吧

CleanMyMac X 是由 MacPaw 公司开发的一款针对 macOS 操作系统的电脑清理工具。它可以帮助用户清理电脑中的垃圾文件、卸载不需要的软件、优化电脑性能等。它的界面简洁明了&#xff0c;操作简单易懂&#xff0c;非常适合普通用户使用。 链接: https://pan.baidu.com/s/1_TFnrI…

【技巧】ChatGPT Prompt 提示语大全

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 主要来自&#xff1a;https://github.com/f/awesome-chatgpt-prompts ChatGPT SEO提示 Contributed by: StoryChief AI Reference: 7 Powerful ChatGPT Prompts to Create SEO Content Faster 供稿人&#xff1a;…

Linux安装Nginx及配置TCP负载均衡

目录 1、安装编译工具及库文件2、下载解压Nginx压缩包3、Ngnix配置Tcp负载均衡4、配置Ngnix的文件5、Nginx启动 1、安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c libtool openssl openssl-devel pcre-devel2、下载解压Nginx压缩包 wget https://nginx.o…

【创作纪念日】1024回忆录

不知不觉中&#xff0c;从创作第一篇文章到现在&#xff0c;已经1024天了&#xff0c;两年多的时间里&#xff0c;已经从硕士到博士了&#xff0c;1024&#xff0c;对于程序员来说&#xff0c;是个特别的数字吧&#xff0c;在此回忆与记录一下这些美好的经历吧。 缘起 很早以前…

MySQL面试题--开发(最全,涵盖SQL基础、架构、事务)

MySQL面试题--事务https://mp.csdn.net/mp_blog/creation/editor/136947072 MySQL面试题--MySQL内部技术架构https://blog.csdn.net/Timebro/article/details/136946046?spm1001.2014.3001.5501 MySQL面试题--最全面-索引https://blog.csdn.net/Timebro/article/details/136…

列车票务信息管理系统设计与实现|jsp+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW调试部署环境&#xff0c;文末可获取本项目的所有资料。 推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java…

kali安装docker(亲测有效)

第一步&#xff1a;添加Docker官方的GPG密钥 curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - 第二步&#xff1a; 第二步更新源 echo deb https://download.docker.com/linux/debian stretch stable> /etc/apt/sources.list.d/docker.list…

鸿蒙Harmony应用开发—ArkTS-枚举说明

说明&#xff1a; 本模块首批接口从API version 7开始支持&#xff0c;后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 Color 从API version 9开始&#xff0c;该接口支持在ArkTS卡片中使用。 颜色名称颜色值颜色示意Black0x000000 Blue0x0000ff Brown…

C#中右键通过listview来控制datagridview字段值的是否显示、显示顺序,并存储到XML中。

最终显示效果&#xff0c;如下图所示&#xff1a; datagridview开始显示通过调用XML存储的字段值及顺序来显示&#xff0c;右键调出Tools来控制显示的顺序及是否显示&#xff0c;通过加号和减号进行调整顺序。 XML存储字段值及顺序 主要代码及事件&#xff1a; 获取datagridv…

ARM CPU的总线发展

ARM架构是当今世界上最为广泛应用的嵌入式处理器架构之一&#xff0c;其CPU总线的发展对于系统性能和扩展性具有重要影响。本文将探讨ARM CPU总线的发展历程、关键技术和对系统性能的影响。 以下是我整理的关于嵌入式开发的一些入门级资料&#xff0c;免费分享给大家&#xff…

Orbit 使用指南 10|在机器人上安装传感器 | Isaac Sim | Omniverse

如是我闻&#xff1a; 资产类&#xff08;asset classes&#xff09;允许我们创建和模拟机器人&#xff0c;而传感器 (sensors) 则帮助我们获取关于环境的信息&#xff0c;获取不同的本体感知和外界感知信息。例如&#xff0c;摄像头传感器可用于获取环境的视觉信息&#xff0c…

Spring中的OAuth2

一. 什么是OAuth2 “Auth” 表示 “授权” Authorization “O” 是 Open 的简称&#xff0c;表示 “开放” 连在一起就表示 “开放授权”&#xff0c;OAuth2是一种开放授权协议。 二. OAuth2是什么 怎么用 OAuth2是目前最流行的授权协议&#xff0c;用来授权第三方应用&am…

基于霍夫检测(hough变换)的人眼瞳孔定位,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…

git 上传文件夹至远端仓库的方法

上传的远端git可以是gitlab、github、gitee、gitblit或者gitCode等等 以下以GitHub为例说明&#xff1a; 1、登录GitHub网站&#xff08;账户/密码&#xff09; 2、创建一个新的空白项目&#xff08;或者已有的项目&#xff09;hello-world 分支是master &#xff0c;这里默认即…

[MAUI]集成高德地图组件至.NET MAUI Blazor项目

文章目录 前期准备&#xff1a;注册高德开发者并创建 key登录控制台创建 key获取 key 和密钥 创建项目创建JS API Loader配置权限创建定义创建模型创建地图组件创建交互逻辑 项目地址 地图组件在手机App中常用地理相关业务&#xff0c;如查看线下门店&#xff0c;设置导航&…

深入理解Redis的Sentinel机制

Sentinel简述 Sentinel为了解决什么问题&#xff1f; Sentinel&#xff08;哨岗、哨兵&#xff09;是Redis的高可用性&#xff08;high availability&#xff09;解决方案。 我们知道Redis 的主从复制模式可以将主节点的数据改变同步给从节点&#xff0c;这样从节点就可以起…

有什么可以下载网页视频的浏览器插件 浏览器如何下载网页视频 网页视频怎么下载到本地 网页视频下载软件 IDM下载

在视频网站上看电影追剧&#xff0c;已经成为了大众生活中必不可少的一部分。为了保护自家视频的版权&#xff0c;很多平台都禁止用户下载会员视频。其实只要掌握了正确的方法&#xff0c;一样可以将会员视频下载到本地保存。那么有关有什么可以下载网页视频的浏览器&#xff0…