力扣爆刷第89天之hot100五连刷31-35

力扣爆刷第89天之hot100五连刷31-35

文章目录

      • 力扣爆刷第89天之hot100五连刷31-35
      • 一、25. K 个一组翻转链表
      • 二、138. 随机链表的复制
      • 三、148. 排序链表
      • 四、23. 合并 K 个升序链表
      • 五、146. LRU 缓存

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

题目链接:https://leetcode.cn/problems/reverse-nodes-in-k-group/description/?envType=study-plan-v2&envId=top-100-liked
思路:k个一组翻转,写好一个单独的翻转方法,然后外部控制好每次翻转的头和尾。

class Solution {public ListNode reverseKGroup(ListNode head, int k) {ListNode root = new ListNode(-1, head);ListNode p = root, fast = head;int i = 0;while(fast != null) {i++;fast = fast.next;if(i % k == 0) {p = reverse(p, fast);}}return root.next;}ListNode reverse(ListNode start, ListNode end) {ListNode p1 = start, p2 = start.next, p3 = p2;start.next = null;while(p2 != end) {ListNode t = p2.next;p2.next = p1.next;p1.next = p2;p2 = t;}p3.next = end;return p3;}}

二、138. 随机链表的复制

题目链接:https://leetcode.cn/problems/copy-list-with-random-pointer/description/?envType=study-plan-v2&envId=top-100-liked
思路:使用map做一个映射记录,key为旧节点,value为新节点,然后遍历复制新链表,random值也复制过去,然后再遍历一遍新链表,
根据key去找value,即可。


class Solution {public Node copyRandomList(Node head) {// key-旧节点 value-新节点Map<Node, Node> map = new HashMap<>();Node root = new Node(-1);Node p1 = head, p2 = root;while(p1 != null) {Node n = new Node(p1.val);n.random = p1.random;map.put(p1, n);p2.next = n;p2 = n;p1 = p1.next;}p2 = root.next;while(p2 != null) {if(p2.random != null) {p2.random = map.get(p2.random);}p2 = p2.next;}return root.next;}
}

三、148. 排序链表

题目链接:https://leetcode.cn/problems/sort-list/description/?envType=study-plan-v2&envId=top-100-liked
思路:采用归并排序,递归划分链表,直到划分到单个元素,然后再排序。

class Solution {public ListNode sortList(ListNode head) {return sortList(head, null);}public ListNode sortList(ListNode head, ListNode tail) {if (head == null) {return head;}if (head.next == tail) {head.next = null;return head;}ListNode slow = head, fast = head;while (fast != tail) {slow = slow.next;fast = fast.next;if (fast != tail) {fast = fast.next;}}ListNode mid = slow;ListNode list1 = sortList(head, mid);ListNode list2 = sortList(mid, tail);ListNode sorted = merge(list1, list2);return sorted;}public ListNode merge(ListNode head1, ListNode head2) {ListNode dummyHead = new ListNode(0);ListNode temp = dummyHead, temp1 = head1, temp2 = head2;while (temp1 != null && temp2 != null) {if (temp1.val <= temp2.val) {temp.next = temp1;temp1 = temp1.next;} else {temp.next = temp2;temp2 = temp2.next;}temp = temp.next;}if (temp1 != null) {temp.next = temp1;} else if (temp2 != null) {temp.next = temp2;}return dummyHead.next;}
}

四、23. 合并 K 个升序链表

题目链接:https://leetcode.cn/problems/merge-k-sorted-lists/description/?envType=study-plan-v2&envId=top-100-liked
思路:使用优先级队列存放链表,出队后拼接链表,然后在把下一个节点入队。

/*** 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 mergeKLists(ListNode[] lists) {if(lists.length == 0) return null;PriorityQueue<ListNode> queue = new PriorityQueue<>((a, b) -> a.val - b.val);for(ListNode list : lists) {if(list != null) {queue.add(list);}}ListNode root = new ListNode();ListNode p = root;while(!queue.isEmpty()) {ListNode min = queue.poll();p.next = min;p = min;if(min.next != null) {queue.add(min.next);}}return root.next;}
}

五、146. LRU 缓存

题目链接:https://leetcode.cn/problems/lru-cache/description/?envType=study-plan-v2&envId=top-100-liked
思路:最近最少使用,get或put都会是得该元素优先级最高,容量满了就要把最久未使用的给去掉,那么可以利用LinkedHashMap的特性,底层采用哈希表和双向链表,put方法加入的元素永远在链表的最后,最先添加进来的在头结点,所以可以使用Integer first = map.keySet().iterator().next();获取头结点然后把头结点给去掉。

class LRUCache {LinkedHashMap<Integer, Integer> map;int cap = 0;public LRUCache(int capacity) {map = new LinkedHashMap<>();cap = capacity;}public int get(int key) {if (!map.containsKey(key)) {return -1;}Integer val = map.remove(key);map.put(key, val);return val;}public void put(int key, int value) {if (map.containsKey(key)) {map.remove(key);map.put(key, value);return;}if (cap <= map.size()) {Integer first = map.keySet().iterator().next();map.remove(first);}map.put(key, value);}
}

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

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

相关文章

python第九节:类的使用(3)

类的继承&#xff1a; 一个类继承另一个类时&#xff0c;它将自动获得另一个类的所有属性和方法&#xff1b;原有的类称为父类&#xff0c;而新类称为子类。子类继承了其父类的所有属性和方法&#xff0c;同时还可以定义自己的属性和方法。 创建子类时&#xff0c;必须在括号…

Java 简历优化及注意事项

Java 简历优化及注意事项 前言1、自我介绍2、掌握技术技能3、项目经验4、项目必问的细节点:5、项目中的难点以及优化改进点6、获奖经历7、面试注意事项 前言 最新的 Java 面试题&#xff0c;技术栈涉及 Java 基础、集合、多线程、Mysql、分布式、Spring全家桶、MyBatis、Dubbo…

找出单身狗1,2

目录 1. 单身狗12. 单身狗2 1. 单身狗1 题目如下&#xff1a; 思路&#xff1a;一部分人可能会使用对数组排序&#xff0c;遍历数组的方式去找出只出现一次的数字&#xff0c;但这种方法的时间复杂度过高&#xff0c;有时候可能会不满足要求。 有一种十分简便的方法是使用异或…

​LeetCode解法汇总2834. 找出美丽数组的最小和

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你两个正整数&#xff1a;n 和 target …

DEAP:利用生理信号进行情绪分析的数据库【DEAP数据集】

文章目录 摘要引言刺激选择实验环境参与者步骤参与者自我评估 主观评价分析EEG频率与参与者评分之间的相关性单次试验分类结果 结论 点击下载原文 摘要 ● DEAP&#xff1a;用于分析人类情感状态的多模态数据集。 ● 32名参与者观看了40个一分钟长的音乐视频。 ● 参与者根据唤…

c++ primer中文版第五版作业第十三章

仓库地址 文章目录 13.113.213.313.413.513.613.713.813.913.1013.1113.1213.1313.1413.1513.1613.1713.1813.1913.2013.2113.2213.2313.2413.2513.2613.2713.2813.2913.3013.3113.3213.3313.3413.3513.3613.3713.3813.3913.4013.4113.4213.4313.4413.4513.4613.4713.4813.4913…

PostgreSQL教程(二十二):服务器管理(四)之服务器配置

一、设置参数 1.1 参数名称和值 所有参数名都是大小写不敏感的。每个参数都可以接受五种类型之一的值&#xff1a; 布尔、字符串、整数、 浮点数或枚举。该类型决定了设置该参数的语法&#xff1a; 布尔: 值可以被写成 on, off, true, false, yes, no, 1, 0 &#xff08;都是…

Programming Abstractions in C阅读笔记:p312-p326

《Programming Abstractions in C》学习第77天&#xff0c;p312-p326&#xff0c;总计15页&#xff0c;第7章完结。 一、技术总结 第7章主要讲算法分析——引入时间复杂度这一概念来评估算法的快慢。时间复杂度使用大O符号来表示。 第7章以排序算法为示例&#xff0c;包含&a…

go调用 c++中数组指针相关

要在Go语言中调用C编译的DLL&#xff08;动态链接库&#xff09;并传递数组&#xff0c;你需要遵循以下步骤&#xff1a; 编写C代码&#xff1a;首先&#xff0c;你需要有一个C的DLL&#xff0c;它提供了你想要在Go中调用的函数。为了确保Go可以调用它&#xff0c;你需要使用C…

[PTA] 分解质因子

输入一个正整数n&#xff08;1≤n≤1e15&#xff09;&#xff0c;编程将其分解成若干个质因子&#xff08;素数因子&#xff09;积的形式。 输入格式: 任意给定一个正整数n&#xff08;1≤n≤1e15&#xff09;。 输出格式: 将输入的正整数分解成若干个质因子积的形式&#…

ubuntu 卸载miniconda3

一开始安装路径错了&#xff0c;需要重新安一次&#xff0c;就一起记录了。 前提是这种方式安装&#xff1a; ubuntu安装miniconda3管理python版本-CSDN博客 删除Miniconda的安装目录 这目录就是你选择安装的时候指定的&#xff0c;如果记不得了,可以这样查看 which conda 这…

数据库压力测试方法概述

一、前言 在前面的压力测试过程中&#xff0c;主要关注的是对接口以及服务器硬件性能进行压力测试&#xff0c;评估请求接口和硬件性能对服务的影响。但是对于多数Web应用来说&#xff0c;整个系统的瓶颈在于数据库。 原因很简单&#xff1a;Web应用中的其他因素&#xff0c;…

Chrome安装Axure插件

打开原型目录/resources/chrome&#xff0c;重命名axure-chrome-extension.crx&#xff0c;修改后缀为rar&#xff0c;axure-chrome-extension.rar 解压到axure-chrome-extension目录打开Chrome&#xff0c;更多工具->扩展程序&#xff0c;打开开发者模式&#xff0c;选择加…

结构体和malloc学习笔记

结构体学习&#xff1a; 为什么会出现结构体&#xff1a; 为了表示一些复杂的数据&#xff0c;而普通的基本类型变量无法满足要求&#xff1b; 定义&#xff1a; 结构体是用户根据实际需要自己定义的符合数类型&#xff1b; 如何使用结构体&#xff1a; //定义结构体 struc…

[C++]类和对象,explicit,static,友元,构造函数——喵喵要吃C嘎嘎4

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;大大会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…

FineReport决策报表Excel导出数据不全解决办法

一、首先建立决策报表 决策报表不带参数导出办法&#xff08;即没有参数面板&#xff09; 普通决策报表导出&#xff08;没有搜索面板&#xff09; 如果决策报表带参数&#xff08;即有搜索框&#xff09;&#xff0c;用上面的办法只能导出部分数据&#xff0c;数据不全 二、…

如何应对不想工作的情况

不想工作,这是每个人都可能遇到的情况。但是,作为一名程序员,我们需要保持高效率和创造力,以满足项目的需求和进度。以下是一些建议,帮助你在不想工作的时候保持高效和专注。 确定原因 不想工作可能有很多原因,比如疲劳、缺乏动力、工作内容不感兴趣等等。确定原因可以帮助你找…

蓝色经典免费wordpress模板主题

蓝色经典配色的免费wordpress建站主题&#xff0c;万能的wordpress建站主题。 https://www.wpniu.com/themes/24.html

董宇辉所有商标已转到与辉同行名下!

近日董宇辉此前由东方优选申请的所有商标已转到与辉同行主体名下&#xff0c;普推知产老杨经检索发现&#xff0c;这些商标都是2022年6月由东方优选提交申请&#xff0c;在2023年12月28时提交商标转让&#xff0c;最近转让成功&#xff0c;转让周期是2个半月左右。 转让的商标除…

指针进阶(下)指针实操

sizeof 和 strlen 首先我们来复习一下sizeof 和 strlen 的区别。 sizeof 是操作符&#xff0c;只关注内存中存放的数据的大小&#xff0c;并不会参与sizeof 括号内部的计算。注意它的单位是字节 #include <stdio.h>int main() {int a 10;printf("%d\n", size…