【LeetCode热题100】打卡第17天:接雨水全排列旋转图像

news2024/11/27 15:41:57

文章目录

  • 【LeetCode热题100】打卡第17天:接雨水&全排列&旋转图像
    • ⛅前言
  • 接雨水
    • 🔒题目
    • 🔑题解
  • 全排列
    • 🔒题目
    • 🔑题解
  • 旋转图像
    • 🔒题目
    • 🔑题解

【LeetCode热题100】打卡第17天:接雨水&全排列&旋转图像

⛅前言

大家好,我是知识汲取者,欢迎来到我的LeetCode热题100刷题专栏!

精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。在此专栏中,我们将会涵盖各种类型的算法题目,包括但不限于数组、链表、树、字典树、图、排序、搜索、动态规划等等,并会提供详细的解题思路以及Java代码实现。如果你也想刷题,不断提升自己,就请加入我们吧!QQ群号:827302436。我们共同监督打卡,一起学习,一起进步。

博客主页💖:知识汲取者的博客

LeetCode热题100专栏🚀:LeetCode热题100

Gitee地址📁:知识汲取者 (aghp) - Gitee.com

Github地址📁:Chinafrfq · GitHub

题目来源📢:LeetCode 热题 100 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台

PS:作者水平有限,如有错误或描述不当的地方,恳请及时告诉作者,作者将不胜感激

接雨水

🔒题目

原题链接:42. 接雨水

在这里插入图片描述

🔑题解

  • 解法一

    待定
    

    复杂度分析:

    • 时间复杂度: O ( ) O() O()
    • 空间复杂度: O ( ) O() O()

    其中 n n n 为数组中元素的个数

全排列

🔒题目

原题链接:46. 全排列

在这里插入图片描述

🔑题解

  • 解法一:递归+回溯

    看到这种全排列,一下就想到了BFS,这类题型算是很常规的题目了。这里就不再过多赘述了,毕竟时间宝贵

    import java.util.*;
    
    /**
     * @author ghp
     * @title 全排列
     */
    class Solution {
        public List<List<Integer>> permute(int[] nums) {
            List<List<Integer>> ans = new ArrayList<>(10);
            Deque<Integer> path = new LinkedList<>();
            boolean[] vis = new boolean[nums.length];
            bfs(ans, nums, path, vis);
            return ans;
        }
    
        private void bfs(List<List<Integer>> ans, int[] nums, Deque<Integer> path, boolean[] vis) {
            // 递归结束条件
            if (path.size() == nums.length) {
                // 此时已经遍历到最后一层了
                ans.add(new ArrayList<>(path));
                return;
            }
            for (int i = 0; i < nums.length; i++) {
                if (!vis[i]) {
                    // 当前元素没有没被遍历,则添加到path中
                    path.addLast(nums[i]);
                    vis[i] = true;
                    bfs(ans, nums, path, vis);
                    // 恢复现场,用于回溯
                    vis[i] = false;
                    path.removeLast();
                }
            }
        }
    }
    

    备注:这里有一点小疑问?明明LinkedList删除和新增的性能要高于ArrayList,但是为什么使用ArrayList提交能够击败100%,但是使用LinkedList只能击败92%?有懂的大佬吗,希望能够为我解答一下疑惑w(゚Д゚)w

  • 解法二

    这个解法是LeetCode官方提供的,我也是参考官方给出的思路,重新写了一遍。他是通过不断两两交换实现,思路比较新颖,十分值得借鉴。

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.List;
    import java.util.stream.Collectors;
    
    /**
     * @author ghp
     * @title 全排列
     */
    class Solution {
        public List<List<Integer>> permute(int[] nums) {
            List<List<Integer>> ans = new ArrayList<>(10);
            List<Integer> path = Arrays.stream(nums).boxed().collect(Collectors.toList());
            bfs(ans, path, 0);
            return ans;
        }
    
        private void bfs(List<List<Integer>> ans, List<Integer> path, int step) {
            // 递归结束条件
            if (step == path.size()) {
                // 此时已经遍历到最后一层了
                ans.add(new ArrayList<>(path));
                return;
            }
            for (int i = step; i < path.size(); i++) {
                // 交换当前层元素(也就是第step个元素)与当前第i个元素
                Collections.swap(path, step, i);
                // 遍历下一层
                bfs(ans, path, step+1);
                // 恢复现场,用于回溯
                Collections.swap(path, step, i);
            }
        }
    }
    

旋转图像

🔒题目

原题链接:48. 旋转图像

在这里插入图片描述

🔑题解

  • 解法一:通过找出规律,进行替换

    通过枚举,可以发现替换的规律,如下所示:

    在这里插入图片描述

    ( 0 , 0 ) → ( 0 , n − 1 ) ( 0 , 1 ) → ( 1 , n − 1 ) ( 0 , 2 ) → ( 2 , n − 1 ) ( 1 , 0 ) → ( 0 , n − 2 ) ( 1 , 1 ) → ( 1 , n − 2 ) ( 1 , 2 ) → ( 2 , n − 2 ) . . . (0,0) → (0, n-1) \\ (0,1) → (1, n-1) \\ (0,2) → (2, n-1) \\ \\ (1,0) → (0, n-2) \\ (1,1) → (1, n-2) \\ (1,2) → (2, n-2) \\ ... (0,0)(0,n1)(0,1)(1,n1)(0,2)(2,n1)(1,0)(0,n2)(1,1)(1,n2)(1,2)(2,n2)...
    经过枚举,我们可以得到替换公式: ( i , j ) → ( j , n − 1 − i ) (i, j)→(j, n-1-i) (i,j)(j,n1i)

    import java.util.Arrays;
    
    /**
     * @author ghp
     * @title 旋转图像
     */
    class Solution {
        public void rotate(int[][] matrix) {
            int n = matrix.length;
            int[][] tempArr = new int[matrix.length][matrix.length];
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    int t = matrix[i][j];
                    tempArr[j][n-1-i] = matrix[i][j];
                }
            }
            for (int i = 0; i < n; i++) {
                matrix[i] = Arrays.copyOf(tempArr[i], tempArr[i].length);
            }
        }
    }
    

    复杂度分析

    时间复杂度: O ( n 2 ) O(n^2) O(n2)

    空间复杂度: O ( n 2 ) O(n^2) O(n2)

  • 解法二:先水平翻转,后根据主对角线翻转

    不得不佩服,这个思路真的是太巧妙了😫我怎么就想不到呢

    class Solution {
        public void rotate(int[][] matrix) {
            int n = matrix.length;
            // 水平翻转
            for (int i = 0; i < n / 2; ++i) {
                for (int j = 0; j < n; ++j) {
                    int temp = matrix[i][j];
                    matrix[i][j] = matrix[n - i - 1][j];
                    matrix[n - i - 1][j] = temp;
                }
            }
            // 主对角线翻转
            for (int i = 0; i < n; ++i) {
                for (int j = 0; j < i; ++j) {
                    int temp = matrix[i][j];
                    matrix[i][j] = matrix[j][i];
                    matrix[j][i] = temp;
                }
            }
        }
    }
    
    作者:LeetCode-Solution
    链接:https://leetcode.cn/problems/rotate-image/solution/xuan-zhuan-tu-xiang-by-leetcode-solution-vu3m/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    

    复杂度分析

    时间复杂度: O ( n 2 ) O(n^2) O(n2)

    空间复杂度: O ( 1 ) O(1) O(1)

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

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

相关文章

Elasticsearch 中文分词器

IK 分词器 我们在ES中最常用的中文分词器就是IK分词器&#xff0c;其项目地址为&#xff1a;https://github.com/medcl/elasticsearch-analysis-ik 下载安装 下载地址&#xff1a; https://github.com/medcl/elasticsearch-analysis-ik/releases 下载时注意和es的版本对应&a…

Network 之十二 iPXE 源码、编译过程、Linker tables 机制、移植新驱动、固件使用

最近&#xff0c;正在学习 iPXE 源码&#xff0c;于是开始各种 Google 查找 iPXE 的资料进行学习。以下就是学习过程中一些感觉比较重要的点&#xff0c;特此记录&#xff0c;以备后续查阅。 起源 上世纪 90 年代初&#xff0c;网卡开始在其扩展卡上包含启动 ROM&#xff0c;每…

2023-6-9-一天一种设计模式

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xf…

当在浏览器截屏过曝时,应该采取的措施

一、问题来源 屏幕打开了HDR模式后&#xff0c;浏览器在截图的一瞬间出现色彩错误 正常情况如下&#xff1a; HDR截图过曝后如下&#xff1a; 二、解决方法 1. 关闭屏幕HDR模式 桌面右键显示设置关闭HDR选项 2. 修改浏览器选项 地址栏输入 edge://flags&#xff08;Edg…

【Spring框架】初识Spirng

目录 Spring是什么&#xff1f;什么是容器&#xff1f;什么是IoC&#xff1f;传统开发ioc 开发(控制反转式程序开发) DI(依赖注入) Spring是什么&#xff1f; Spring指的是Spring Framework(Spring框架)&#xff0c;它是一个开源框架&#xff0c;有着活跃而庞大的社区&#xf…

支持无线连接的头戴式耳机,双音腔结构很好听,雷柏VH800上手

平时在PC上玩游戏&#xff0c;除了键鼠一类的操控设备很重要之外&#xff0c;耳机等音频设备也很重要&#xff0c;我用的是头戴式耳机&#xff0c;这种耳机现在有无线版本&#xff0c;用起来很方便&#xff0c;而且延迟很低&#xff0c;可以带来更好的声画同步效果&#xff0c;…

在unity中如何使用chatGPT让虚拟IP动起来

1、导入chatGpt 解决AI智能回答 请根据上一篇文章进行导入&#xff1a;如何使用ChatGPT在unity中进行低代码快速开发&#xff1f;_向视科技&#xff0c;让您看见未来&#xff08;nbhctec&#xff09;的博客-CSDN博客 2、文本也有转换工具 可导入unity 插件-RT-Voice PRO 2.…

【回眸】Python入门(五)基础语法列表和词典:Python如何消灭重复性劳动

前言 本篇博客为填坑篇&#xff0c;这个系列的上一篇竟然是2021年的9月30更新的&#xff0c;离谱&#xff0c;差点就到断更两周年纪念日了&#xff0c;后续逐渐走向填坑的每一天&#xff0c;继续创作&#xff0c;希望这个系列的专栏文章能帮助到更多有需要的人。 列表 什么是列…

C++算法:有向无环图拓扑排序(领接链表)

文章目录 前言一、邻接表二、代码1、生成图2、出度、入度计算3、拓扑排序 总结 前言 前文有向无环图实现游戏技能树中我们使用了矩阵存储图的关系&#xff0c;可以称之为邻接矩阵。显然&#xff0c;链表也是可以实现的。在图结构入门一文中&#xff0c;我们也提到了链表存储的…

湖南大学OS-2020(另一张)期末考试解析

【特别注意】 答案来源于wolf以及网络 是我在备考时自己做的&#xff0c;仅供参考&#xff0c;若有不同的地方欢迎讨论。 【试卷评析】 这张卷子很老了&#xff0c;我不知道具体的年份&#xff0c;部分题目可能有用。如果仔细研究应该会有所收获。 【试卷与答案】 一、选…

机器学习 | 决策树 Decision Tree | 概念向

参考视频&#xff1a;【小萌五分钟】机器学习 | 决策树 文章目录 &#x1f4da;决策树是什么&#xff08;根节点、叶子节点、分支、深度&#xff09;&#x1f4da;决策树&#xff1a;分类树——算法思想&#x1f4da;分类错误率&#xff0c;熵&#xff0c;基尼指数&#x1f407…

蓝库云|实体店搭建一套巡店管理系统,能让大型连锁店立竿见影

传统巡店工作存在许多问题特别是大型连锁店&#xff0c;包括工作效率低、数据收集不便捷、信息共享困难等。为了解决这些问题&#xff0c;蓝库云认为拥有一套巡店管理系统就显得非常重要了。 巡店管理系统具备以下特点&#xff1a;手机电脑数据同步、实时数据采集和记录、可定…

谷粒商城学习笔记(二):简介- 谷粒商城项目微服务架构图

目录 项目前置知识一、前后端分离开发&#xff0c;分为 内网部署 和 外网部署。二、用户是通过使用 客户端 来完成各种的功能三、网关的作用四、Sentiel组件五、Feign组件六、OAuth2.0认证中心七、SpringSecurity组件八、关于数据存储的解决方案九、定位bug十、注册中心十一、配…

IDEA 远程 Debug 调试,你可以不需要,但是要会

文章目录 前言配置IDEA设置启动脚本改造 细节细节1&#xff1a;停在本地断点&#xff0c;关闭程序后会继续执行吗细节2&#xff1a;jar包代码和本地不一致会怎么样&#xff1f;细节3&#xff1a;日志打印在哪里&#xff1f;细节4&#xff1a;调试时其他人会不会卡住&#xff1f…

湖南大学OS-2022期末考试解析

【特别注意】 答案来源于不确定的光子和wolf 是两位同学在备考时自己做的&#xff0c;仅供参考&#xff0c;若有不同的地方欢迎讨论。 【试卷评析】 这张卷子比较正&#xff0c;个人感觉能够代表接下来几年的考试方向。如果仔细研究应该会有所收获。 【试卷与答案】 一、&…

网络安全认证CISP、CISSP对比及分析

好多网络安全行业或者打算转行该行业的人在纠结学是考取CISP认证还是CISSP认证&#xff0c;作为从事多年网络安全培训认证业务的专家&#xff0c;对这两个认证还是非常了解的&#xff0c;下面是这两个认证的一个对比说明&#xff0c;希望能够帮助到大家更好地选择到适合自己的认…

湖南大学OS-2020期末考试解析

【特别注意】 答案来源于wolf以及网络 是我在备考时自己做的&#xff0c;仅供参考&#xff0c;若有不同的地方欢迎讨论。 【试卷评析】 这张卷子有点老了&#xff0c;部分题目可能有用。如果仔细研究应该会有所收获。 【试卷与答案】 一、选择题&#xff08;15%&#xff…

基于SSM+Vue的房屋租赁网站-求租合同设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…

“混合办公”已来!

不知不觉中&#xff0c;你已经开启“未来办公模式”了。这听起来好像有些疯狂&#xff0c;但事实就是如此&#xff01; 试想一下&#xff0c;近三年&#xff0c;你是不是很少去办公室&#xff0c;但却没有耽误工作&#xff1f;你有多少次是在出差的途中开视频会议&#xff0c;…

5分钟了解Kubernetes Ingress和Gateway API

了解Kubernetes Ingress和Gateway API之间的差异&#xff0c;以实现有效的流量管理。原文: Kubernetes Ingress Vs Gateway API Ingress vs Gateway API 概述 Kubernetes如今被广泛应用于容器管理、微服务编排解决方案。对于如何控制微服务的入口流量&#xff0c;Kubernetes提供…