力扣爆刷第117天之CodeTop100五连刷71-75

力扣爆刷第117天之CodeTop100五连刷71-75

文章目录

      • 力扣爆刷第117天之CodeTop100五连刷71-75
      • 一、48. 旋转图像
      • 二、39. 组合总和
      • 三、113. 路径总和 II
      • 四、34. 在排序数组中查找元素的第一个和最后一个位置
      • 五、394. 字符串解码

一、48. 旋转图像

题目链接:https://leetcode.cn/problems/rotate-image/description/
思路:向右旋转90度可以由两个操作来达成,即先沿着nums[0][0]和nums[n][n]对角线进行对折,然后再左右对折。

class Solution {public void rotate(int[][] matrix) {int n = matrix.length;for(int i = 0; i < n; i++) {for(int j = i; j < n; j++) {int t = matrix[i][j];matrix[i][j] = matrix[j][i];matrix[j][i] = t;}}for(int i = 0; i < n; i++) {for(int j = 0; j < n/2; j++) {int t = matrix[i][j];matrix[i][j] = matrix[i][n-j-1];matrix[i][n-j-1] = t;}}}
}

二、39. 组合总和

题目链接:https://leetcode.cn/problems/combination-sum/description/
思路:组合成一个数,元素无重可复用,开始索引位置不需要加1,然后利用排序,可以早停,其他的就是递归模板。

class Solution {int sum = 0;List<Integer> list = new ArrayList<>();List<List<Integer>> resList = new ArrayList<>();public List<List<Integer>> combinationSum(int[] candidates, int target) {Arrays.sort(candidates);backTracking(candidates, target, 0);return resList;}void backTracking(int[] candidates, int target, int start) {if(sum == target) {resList.add(new ArrayList(list));return;} for(int i = start; i < candidates.length && sum + candidates[i] <= target; i++) {sum += candidates[i];list.add(candidates[i]);backTracking(candidates, target, i);sum -= candidates[i];list.remove(list.size()-1);}}
}

三、113. 路径总和 II

题目链接:https://leetcode.cn/problems/path-sum-ii/description/
思路:对二叉树进行递归,路径指的是从根节点到叶子节点,故而前序遍历,在进入左右子树之前搜集结果,当前节点的左右子树递归结束时,要向上一级返回,需要进行回溯的返回操作。

class Solution {int sum = 0, pro = 0;List<Integer> list = new ArrayList<>();List<List<Integer>> resList = new ArrayList<>();public List<List<Integer>> pathSum(TreeNode root, int targetSum) {backTracking(root, targetSum);return resList;}void backTracking(TreeNode root, int targetSum) {if(root == null) return;sum += root.val;list.add(root.val);if(root.left == null && root.right == null && sum == targetSum) {   resList.add(new ArrayList(list));}backTracking(root.left, targetSum);backTracking(root.right, targetSum);sum -= root.val;list.remove(list.size()-1);}
}

四、34. 在排序数组中查找元素的第一个和最后一个位置

题目链接:https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/description/
思路:采用二分查找,分别查找左边界和右边界,注意边界条件,越界和不符合的返回-1;

class Solution {public int[] searchRange(int[] nums, int target) {int left = findList(nums, 0, nums.length-1, target);int right = findRight(nums, 0, nums.length-1, target);return new int[]{left, right};}int findList(int[] nums, int left, int right, int target) {while(left <= right) {int mid = left + (right - left) / 2;if(nums[mid] >= target) {right = mid - 1;}else{left = mid + 1;}}if(left < 0 || left >= nums.length) return -1;return nums[left] == target ? left : -1;} int findRight(int[] nums, int left, int right, int target) {while(left <= right) {int mid = left + (right - left) / 2;if(nums[mid] <= target) {left = mid + 1;}else{right = mid - 1;}}if(right < 0 || right >= nums.length) return -1;return nums[right] == target ? right : -1;}
}

五、394. 字符串解码

题目链接:https://leetcode.cn/problems/decode-string/description/
思路:字符串的编码符合栈的规律,故使用两个栈,一个栈记录数字,一个栈记录前面已经拼接好的片段,一个字符串作为全局变量接收字符,遇到左括号时记录数字和已经拼好的片段,然后计数和字符串重置,用来记录括号内部的字符,遇到右括号,用之前栈里记录的数字循环拼接这一段字符串,最后再和栈里保存的括号左边的片段进行拼接。

class Solution {public String decodeString(String s) {int num = 0;LinkedList<Integer> stk1 = new LinkedList<>();LinkedList<String> stk2 = new LinkedList<>();StringBuilder res = new StringBuilder();for(char c : s.toCharArray()) {if(c >= '0' && c <= '9') {num = num * 10 + Integer.parseInt(c + "");}else if(c == '[') {stk1.push(num);stk2.push(res.toString());num = 0;res = new StringBuilder();}else if(c == ']') {StringBuilder t = new StringBuilder();int count = stk1.pop();for(int i = 0; i < count; i++) {t.append(res);}res = new StringBuilder(stk2.pop() + t);}else{res.append(c);}}return res.toString();}}

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

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

相关文章

Swift中的布尔型

在Swift中&#xff0c;布尔型数据用Bool类型表示。布尔型数据只有两个可能的值&#xff1a;true和false。布尔型数据通常用于条件判断和逻辑运算。例如&#xff1a; let isTrue true let isFalse falseif isTrue {print("这是真的") } else {print("这是假的…

GPT中的Transformer架构以及Transformer 中的注意力机制

目录 1 GPT中的Transformer架构 2 transformer中的注意力机制 参考文献&#xff1a; 看了两个比较好的视频&#xff0c;简单做了下笔记。 1 GPT中的Transformer架构 GPT是Generative Pre-trained Transformer单词的缩写&#xff0c;其中transformer是一种特定的神经网络&a…

如何排查k8s集群中Pod内mysqld进程占用内存消耗过高?

文章目录 1. **查看容器资源使用情况**&#xff1a;2. **进入容器内部**&#xff1a;3. **检查进程内存使用**&#xff1a;4. **MySQL服务器状态检查**&#xff1a;5. **MySQL日志分析**&#xff1a;6. **使用专门的MySQL监控工具**&#xff1a;7. **配置文件检查**&#xff1a…

Java基础07--多线程-网络编程-Java高级

一、多线程 1.认识多线程 ①线程 ②多线程 2.创建线程方式 ①方式一&#xff1a;继承Thread类 1.让子类继承Thread线程类 2.重写run方法&#xff0c;就是这个线程执行会执行的操作。 3.创建继承Thread的子类对象就代表一个线程 4.启动线程:.start()-自动执行run方法 注意&am…

全量知识系统 程序详细设计之 统一资产模型(QA-SmartChat)

Q1. 下面我们聊聊整个全知系统的设计 的矩阵和函数&#xff0c;矩阵表示的是“活物”&#xff0c;分别 类似 一个基因的活性、一个实体的辨识度和某种特征的可区分度。 函数的可微、可积和可导性 则表示 运动的控制方式 在全知系统设计中&#xff0c;矩阵和函数是两个核心的组…

Java中的Set、List、Map的区别及主要实现类方法

Java中的Set、List、Map的区别 数组是大小固定的&#xff0c;并且同一个数组只能存放类型一样的数据&#xff08;基本类型/引用类型&#xff09;&#xff0c;JAVA集合可以存储和操作数目不固定的一组数据。 所有的JAVA集合都位于 java.util包中&#xff01; JAVA集合只能存放引…

Linux netstat命令教程:网络统计工具(附实例详解和注意事项)

Linux netstat命令介绍 netstat&#xff08;网络统计&#xff09;是一个在Linux中用于显示网络相关信息并诊断各种网络问题的命令。它可以显示你的计算机正在进行的连接、发送信息的路径&#xff0c;甚至一些技术细节&#xff0c;如正在发送或接收的数据包的数量。 Linux net…

速盾:CDN是怎么防止ddos攻击的?

CDN&#xff08;内容分发网络&#xff09;是一种用于提高网站性能和安全性的重要技术。它通过在全球多个位置分布节点来存储和分发网站内容&#xff0c;以减少用户访问网站时的延迟并提高网站的可用性。除了提供高质量的内容分发&#xff0c;CDN还能有效地防止DDoS攻击。 DDoS…

Frida 远程RPC 调用进阶

引言: 今天讲下Frida 远程RPC 调用,为什么要用它,方便快捷。 安卓IOS 简单适用,代码量少很多,比Xposed。 1,安卓调用: 安卓调用,一般我们使用usb,模拟器的话直接用adb 命令去直连都可以,但是我这里叫一个稳定的方法,使用wifi adb ,比较靠谱,设置模拟器的ip,然…

点亮一颗 LED: 单片机 ch32v003 (RISC-V) 使用 rust 编写固件

首发日期 2024-04-09, 以下为原文内容: 使用 rust 编写单片机的程序 ? 很新, 但没问题. 使用 RISC-V CPU 的单片机 (比如 ch32v003) ? 也没问题. 同时使用 ? 哦嚯, 问题出现了 !! ch32v003 是一款使用 rv32ec 指令集的国产单片机, 很便宜 (某宝零卖只要 0.4 元一个, 在同档…

简单了解JVM

一.JVM简介 jvm及Java virtual machineJava虚拟机&#xff0c;它是一个虚构出来的计算机&#xff0c;一种规范。其实抛开这么专业的句子不说&#xff0c;就知道 JVM 其实就类似于一台小电脑运行在 windows 或者 linux 这些操作系统环境下即可。它直接和操作系统进行交互&#…

Handler——小白能懂的原理,老鸟需要的面经

1.机制学习 1.1Handler定义 发送并处理 与线程的消息队列关联的Message和Runnable 1.2基本用法 1、Message.obtain() 从消息池取得Message 2、Handler().sendMessage(msg) 发送消息 3、Handler().post 将Runnable包装成Message发送 以下提供一个结构代码 import android.os.H…

VMware导出虚拟机vmkd格式转换qcow2

VMware虚拟机导出qcow2格式可以上传至云服务 1、需要导出的虚拟机 2、克隆虚拟机 3、选择克隆源 4、创建完整克隆 5、完成 6、找到VMware安装路径 7、找到vmware-vdiskmanager所在路径使用cmd或Windows PowerShell进入目录 进入vmware-vdiskmanager目录 cd F:\软件\VMware Wo…

VRTK/SteamVR手柄震动功能

VRTK/SteamVR手柄震动功能 前言代码块 前言 手柄震动功能配合虚拟仿真模块的模拟电击等功能非常方便 代码块 SteamVR_Controller.DeviceRelation.Rightmost是右侧手柄 SteamVR_Controller.DeviceRelation.Leftmost是左侧手柄 var deviceIndex2 SteamVR_Controller.GetDevic…

debian安装和基本使用

debian安装和基本使用 文章目录 debian安装和基本使用1. 为什么选择debian2. 如何下载Debian2.1 小型安装镜像2.2 完整安装镜像 3. Debian操作系统安装3.1 创建Debian虚拟机3.2 安装操作系统 4. Debian系统的初始设置4.1 桌面环境的配置4.2 配置网络4.3 生效网络配置4.4 配置de…

阿药陪你学Java(第零讲)

第零讲&#xff1a;基本数据类型 Java包括两种数据类型&#xff0c;分别是内置数据类型&#xff08;基本数据类型&#xff09;和引用数据类型。 内置数据类型 Java提供了8中内置类型&#xff0c;其中包括4种数字整型、2种数字浮点型、1中字符型、1中布尔型。下面进行详细介绍…

Python防止打包后的exe重复执行

文章目录 一、前言二、实现方法三、代码四、执行结果五、相较于其他方式的优点一、前言 pyinstaller打包的exe如果被连续点击的话,会启动多个程序,对于复杂的程序来说,同时运行可能会造成严重的后果,因此需要一个程序锁,保证单次仅启动一个exe。 二、实现方法 利用 sqli…

React 快速入门:掌握前端开发的核心技能

React 快速入门&#xff1a;掌握前端开发的核心技能 一、React 简介1.1 React 的历史1.2 React 的概念1.3 React 的特点1.4 React 的官网地址 二、开发环境搭建三、React 基础3.1 JSX3.2 组件3.3 Props3.4 State3.5 props 和 state 的区别3.6 Hook 四、React 生命周期五、添加样…

golang context

作用&#xff1a;用于在go协程中 传递上下文、超时、取消、传值 底层实现&#xff1a;是由互斥锁、channel、map来实现的 互斥锁&#xff1a;保护临界资源 channel: 用于信号通知&#xff0c;比如ctx.Done() map: 保存父ctx下派生的所有子ctx, 父ctx关闭&#xff0c;子ctx都关…

Redis Pipelining 底层原理分析及实践

作者&#xff1a;vivo 互联网服务器团队-Wang Fei Redis是一种基于客户端-服务端模型以及请求/响应的TCP服务。在遇到批处理命令执行时&#xff0c;Redis提供了Pipelining(管道)来提升批处理性能。本文结合实践分析了Spring Boot框架下Redis的Lettuce客户端和Redisson客户端对…