力扣爆刷第155天之TOP100五连刷41-45(下一个排列、正序数组中位数、归并排序链表)

力扣爆刷第155天之TOP100五连刷41-45(下一个排列、正序数组中位数、归并排序链表)

文章目录

      • 力扣爆刷第155天之TOP100五连刷41-45(下一个排列、正序数组中位数、归并排序链表)
      • 一、31. 下一个排列
      • 二、4. 寻找两个正序数组的中位数
      • 三、232. 用栈实现队列
      • 四、148. 排序链表
      • 五、69. x 的平方根

一、31. 下一个排列

题目链接:https://leetcode.cn/problems/next-permutation/description/
思路:求下一个排列,本意就是字典序,举个例子,如果1、6、5、4、3、2的下个排列就是2、1、3、4、5、6,如果是3、2、1那么下一个排序是1、2、3,这类题目要结合图像来做,所以可以看的出来,要找的是一个转折点,从右向左寻找第一个凸起点,然后把凸起点右边的第一个大于凸起点左边的值进行交换,然后把凸起点开始到结尾的元素都翻转即可。
从下面这个图好好体会。
在这里插入图片描述

class Solution {public void nextPermutation(int[] nums) {if(nums.length == 1) return ;int len = nums.length, k = len-1;for(int i = len-2; i >= 0; i--) {if(nums[i] < nums[k]) {break;}k--;}if(k == 0) {reverse(nums, 0, len-1);return;}for(int i = len-1; i > k-1; i--) {if(nums[i] > nums[k-1]) {int t = nums[k-1];nums[k-1] = nums[i];nums[i] = t;reverse(nums, k, len-1);break;}}}void reverse(int[] nums, int i, int j) {while(i < j) {int t = nums[i];nums[i] = nums[j];nums[j] = t;i++;j--;}}
}

二、4. 寻找两个正序数组的中位数

题目链接:https://leetcode.cn/problems/median-of-two-sorted-arrays/description/
思路:寻找两个正序数组的中位数,如果向时间复杂度达到log(n + m),解法比较复杂,但是要达到o(n)还是比较简单的,只需要比较并计数即可,从头比较大小,达到总数的二分之一的位置,自然是中位数。

class Solution {public double findMedianSortedArrays(int[] nums1, int[] nums2) {int left = 0, right = 0, n = nums1.length, m = nums2.length;int i = 0, j = 0;for(int k = 0; k <= (m+n)/2; k++) {left = right;if((i < n) && (j >= m || nums1[i] < nums2[j])) {right = nums1[i++];}else {right = nums2[j++];}}return (m+n) % 2 == 0 ? (left + right) / 2.0 : right;}
}

三、232. 用栈实现队列

题目链接:https://leetcode.cn/problems/implement-queue-using-stacks/description/
思路:这也是经典题目了,用栈实现队列,需要使用两个栈,一个栈专门用来放入元素,一个栈专门用来拿出元素。
只要有元素要添加就加入第一个栈中,只要有元素要出队,都从第二个栈里出,但第二个栈如果空了,就把第一个栈内的所有元素都加入到第二个栈中,正好把先进后出,倒腾了两次,变成了先进先出了。

class MyQueue {LinkedList<Integer> stack1 = new LinkedList<>();LinkedList<Integer> stack2 = new LinkedList<>();public MyQueue() {}public void push(int x) {stack1.push(x);}public int pop() {if(stack2.isEmpty()) {while(!stack1.isEmpty()) stack2.push(stack1.pop());}return stack2.pop();}public int peek() {if(stack2.isEmpty()) {while(!stack1.isEmpty()) stack2.push(stack1.pop());}return stack2.peek();}public boolean empty() {return stack1.isEmpty() && stack2.isEmpty();}
}

四、148. 排序链表

题目链接:https://leetcode.cn/problems/sort-list/description/
思路:排序链表,使用归并排序,只需要先递归分割链表成单个节点,然后再归并单个节点即可。

/*** 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 sortList(ListNode head) {return cutList(head, null);}ListNode cutList(ListNode start, ListNode end) {if(start == null) return start;if(start.next == end) {start.next = null;return start;}ListNode slow = start, fast = start;while(fast != end) {slow = slow.next;fast = fast.next;if(fast != end) {fast = fast.next;}}ListNode left = cutList(start, slow);ListNode right = cutList(slow, end);return merge(left, right);}ListNode merge(ListNode root1, ListNode root2) {ListNode root = new ListNode();ListNode p = root;while(root1 != null && root2 != null) {if(root1.val < root2.val) {p.next = root1;root1 = root1.next;}else{p.next = root2;root2 = root2.next;}p = p.next;}if(root1 != null) p.next = root1;if(root2 != null) p.next = root2;return root.next;}
}

五、69. x 的平方根

题目链接:https://leetcode.cn/problems/sqrtx/description/
思路:直接二分查找,没什么好说的。但注意不要用乘法,尽量用除非和减法。

class Solution {public int mySqrt(int x) {if(x <= 1) return x;int left = 1, right = x/2;while(left <= right) {int mid = left + (right - left) / 2;int t = x/mid;if(t == mid) return mid;else if(mid < t) left = mid+1;else right = mid-1;}return right;}
}

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

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

相关文章

量化交易策略:定义及其重要性

量化交易是华尔街和硅谷的秘密结合点&#xff0c;在这里数学和算法与金钱和市场相遇。虽然它曾经是金融巨头的专属领域&#xff0c;但现在它比以往任何时候都更易于接触。 但不要被愚弄&#xff0c;量化交易仍然是一种高速、高压的游戏&#xff0c;在毫秒间可以赚到或失去财富…

STM32CubeIDE复制工程文档

目录 1. 粘贴复制2. 重命名 1. 粘贴复制 复制粘贴 重命名&#xff0c;别重名&#xff0c;点击- copy 结果 2. 重命名 重命名 ioc文件 编译 OK

IDEA 安装与激活详细教程最新(附最新激活码)2099年亲测有效!

我们先从 IDEA 官网下载 IDEA 2024.1 版本的安装包&#xff0c;下载链接如下&#xff1a; https://www.jetbrains.com/idea/download/ 点击下载(下载Ultimate版)&#xff0c;静心等待其下载完毕即可。 激活方式&#xff1a; 正版专属激活码领取

手机越用越慢?试试这4个秘籍,让手机流畅如新

智能手机作为日常生活的得力助手&#xff0c;最初总是以惊人的速度和流畅性给我们留下深刻印象。 但你有没有发现&#xff0c;随着时间的推移&#xff0c;手机似乎开始变得不那么敏捷&#xff0c;甚至出现了反应迟缓和卡顿的情况&#xff1f; 别让这个问题困扰你,下面是四个关…

Linux关闭swap分区操作[适用于CDH报警等]

1.查看swap分区挂载路径(没卵用) swapon -s 2.设置配置文件的swap配置 echo “vm.swappiness 0” > /etc/sysctl.conf 3.设置内存中的swap状态。有时候配置文件为0&#xff0c;但集群或服务仍然使用了swap分区&#xff0c;可能原因就是内存没有同步配置 echo “0” > …

step5:“串口设置”逻辑(下)

文章目录 文章介绍效果图SerialPort.qml代码v1代码v2代码v3 文章介绍 文章qml/c&#xff1a;基础界面的“串口设置”逻辑1实现了 1、串口连接&#xff0c;连接成功的弹窗提示 2、读取数据。 本篇文章需要实现的功能是 1&#xff09;接收数据后更新“已接收”的行数 效果图 Se…

文本分类-RNN-LSTM

1.前言 本节介绍RNN和LSTM&#xff0c;并采用它们在电影评论数据集上实现文本分类&#xff0c;会涉及以下几个知识点。 1. 词表构建&#xff1a;包括数据清洗&#xff0c;词频统计&#xff0c;词频截断&#xff0c;词表构建。 2. 预训练词向量应用&#xff1a;下载并加载Glove的…

鸿蒙星河NEXT学习笔记

1.1 字符串 // 变量的存储和修改&#xff08;string number boolean&#xff09; // 1. 变量存储 // 1.1 字符串 string 类型 // 注意点1&#xff1a;字符串需要用引号引起来&#xff08;单引双引号&#xff09;字符串 "字符串" // 注意点2&#xff1a;存储的时候&a…

Elasticsearch开启认证|为ES设置账号密码|ES账号密码设置|ES单机开启认证|ES集群开启认证

文章目录 前言单节点模式开启认证生成节点证书修改ES配置文件为内置账号添加密码Kibana修改配置验证 ES集群开启认证验证 前言 ES安装完成并运行&#xff0c;默认情况下是允许任何用户访问的&#xff0c;这样并不安全&#xff0c;可以为ES开启认证&#xff0c;设置账号密码。 …

FPGA无网络芯片实现千兆TCP/IP协议栈,基于1G/2.5G Ethernet PCS/PMA or SGMII方案,提供18套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我这里已有的以太网方案网络芯片版本-->千兆网 TCP-->服务器 方案网络芯片版本-->千兆网 TCP-->客户端 方案10G 万兆网 TCP-->服务器客户端 方案1G/2.5G Ethernet PCS/PMA or SGMII 方案AXI 1G/2.5G Ethernet Subs…

AI大模型安全挑战和安全要求解读

引言 随着人工智能技术的飞速发展&#xff0c;大模型技术以其卓越的性能和广泛的应用前景&#xff0c;正在重塑人工智能领域的新格局。然而&#xff0c;任何技术都有两面性&#xff0c;大模型在带来前所未有便利的同时&#xff0c;也引发了深刻的安全和伦理挑战。 大模型&…

vscode安装lean4

本教程演示在Windows系统下如何安装Lean 4正式版。Linux和MacOS版本请参考Lean Manual。 如果你身在中国&#xff0c;在运行安装程序前需要做如下准备&#xff1a; 在系统目录C:\Windows\System32\drivers\etc文件夹下找到hosts文件。对于其它系统用户也都是找到各自系统的host…

字节码编程ASM之两数之和

写在前面 源码 。 看下如何使用ASM来写如下的类&#xff1a; package com.dahuyou.demo.asm;public class AsmSumOfTwo {public AsmSumOfTwo() {}public static void main(String[] var0) {int var1 (new AsmSumOfTwo()).sum(1, 2);System.out.println(var1);}public int su…

Batch学习及应用案例

一、介绍 Batch是一种Windows操作系统中使用的批处理脚本语言&#xff0c;用于自动化执行一系列命令和操作。通过编写批处理脚本&#xff0c;可以实现自动化完成重复性或繁琐的任务&#xff0c;提高工作效率。 Batch脚本可以使用内置的命令和命令行工具&#xff0c;以及调用其…

使用飞书多维表格实现推送邮件

一、为什么用飞书&#xff1f; 在当今竞争激烈的商业环境中&#xff0c;选择一款高效、智能的办公工具至关重要。了解飞书的朋友应该都知道&#xff0c;飞书的集成能力是很强大的&#xff0c;能够与各种主流的办公软件无缝衔接&#xff0c;实现数据交互&#xff0c;提升工作效…

竞赛选题 python区块链实现 - proof of work工作量证明共识算法

文章目录 0 前言1 区块链基础1.1 比特币内部结构1.2 实现的区块链数据结构1.3 注意点1.4 区块链的核心-工作量证明算法1.4.1 拜占庭将军问题1.4.2 解决办法1.4.3 代码实现 2 快速实现一个区块链2.1 什么是区块链2.2 一个完整的快包含什么2.3 什么是挖矿2.4 工作量证明算法&…

vue3中通过vditor插件实现自定义上传图片、录入echarts、脑图、markdown语法的编辑器

1、下载Vditor插件 npm i vditor 我的vditor版本是3.10.2&#xff0c;大家可以自行选择下载最新版本 官网&#xff1a;Vditor 一款浏览器端的 Markdown 编辑器&#xff0c;支持所见即所得&#xff08;富文本&#xff09;、即时渲染&#xff08;类似 Typora&#xff09;和分屏 …

消息队列选型之 Kafka vs RabbitMQ

在面对众多的消息队列时&#xff0c;我们往往会陷入选择的困境&#xff1a;“消息队列那么多&#xff0c;该怎么选啊&#xff1f;Kafka 和 RabbitMQ 比较好用&#xff0c;用哪个更好呢&#xff1f;”想必大家也曾有过类似的疑问。对此本文将在接下来的内容中以 Kafka 和 Rabbit…

阿里AI-Spring Cloud Alibaba AI:快速搭建自己的通义千问

本文基于官方文档。 Spring AI 官方文档&#xff1a;Spring AI :: Spring AI Reference 中文文档&#xff1a;Spring AI 简介 - spring 中文网 (springdoc.cn) Spring AI 是 Spring 官方社区项目&#xff0c;旨在简化 Java AI 应用程序开发&#xff0c;让 Java 开发者像使用…

流光卡片,生成炫酷文字,开源API

https://fireflycard.shushiai.com/ 这是我的一个网站&#xff0c;流光卡片&#xff0c;主要功能是帮你制作酷炫的文字卡片&#xff0c;用精美的卡片让你的文字生动起来。 展示效果如下&#xff1a; 你可以用它制作卡片&#xff0c;来记录自己的表达。支持设定卡片背景、LOGO…