《LeetCode热题100》笔记题解思路技巧优化_Part_5

《LeetCode热题100》笔记&题解&思路&技巧&优化_Part_5

  • 😍😍😍 相知
  • 🙌🙌🙌 相识
  • 😢😢😢 开始刷题
    • 图论
      • 🟡1. 岛屿数量
      • 🟡2. 腐烂的橘子(待定)
      • 🟡3. 课程表(待定)
      • 🟡4. 实现Trie (前缀树)

在这里插入图片描述

😍😍😍 相知

刷题不要一上来就直接干,先看题,明白题说的什么意思,然后想一下用什么现成的算法和数据结构可以快速解决,如果还是无从下手,建议先去看视频,不要直接翻评论或官方代码实现,看完视频,自己在idea中模拟敲几遍代码,如果跑通了,先别急着上leetcode黏贴,而是再回顾一下要点,然后确定自己完全懂了后,在leetcode中手敲,注意是手敲下来!!! 目前我就是采用的这种方法,虽然慢,但是可以维持一周忘不掉它,如果要想长期不忘,只能隔段时间就review一下了,就算是大牛,知道方法,长时间不碰,也不可能保证一次到位把代码敲完一遍过!!!

🙌🙌🙌 相识

刷LeetCode热题100的想法有几个原因:

  1. 流行度高:LeetCode是一个广受欢迎的在线刷题平台,拥有大量用户和活跃的讨论社区。因此,热门题目通常代表了大多数人认为重要的题目或者面试中常见的题目。

  2. 面试备战:LeetCode上的题目往往和面试题目有很大的重合度。刷LeetCode热题100可以帮助你熟悉常见的面试题型和解题思路,提高应对面试的能力。

  3. 广泛的覆盖:热题100覆盖了各种难度级别的题目,包括简单、中等和困难。通过解答这些题目,可以提高自己的算法和编程能力,并扩展自己的知识面。

  4. 反馈和讨论:由于热题100是根据用户的反馈和讨论度排名的,因此这些题目往往有大量的解题思路和讨论可以参考。你可以从其他人的解题过程中学习到很多知识和技巧。

😢😢😢 开始刷题

图论

🟡1. 岛屿数量

题目链接:https://leetcode.cn/problems/number-of-islands/description/?envType=study-plan-v2&envId=top-100-liked

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

class Solution {
    private int [][] ref = new int[][] {{1,0},{-1,0},{0,-1},{0,1}};
    public int numIslands(char[][] grid) {
        int sum = 0;
        if(grid.length==0||grid[0].length==0)return 0;
        boolean[][] flag = new boolean[grid.length][grid[0].length]; 
        for(int i = 0;i<grid.length;i++){
            for(int j = 0;j<grid[i].length;j++){
                if(!flag[i][j] && grid[i][j]=='1'){
                    dfs(grid,flag,i,j);
                    sum++;
                }
            }
        }
        return sum;
    }
    private void dfs(char[][] grid,boolean[][] flag,int a,int b){
        for(int i = 0;i<4;i++){
            int na = a + ref[i][0];
            int nb = b + ref[i][1];
            if(na<0||na>=grid.length||nb<0||nb>=grid[0].length) continue;
            if(!flag[na][nb]&&grid[na][nb]=='1'){
                flag[na][nb] = true;
                dfs(grid,flag,na,nb);
            }
        }
    }
    
}

🟡2. 腐烂的橘子(待定)

题目链接:https://leetcode.cn/problems/rotting-oranges/description/?envType=study-plan-v2&envId=top-100-liked

class Solution {
    public int orangesRotting(int[][] grid) {
        if(grid.length<=0||grid[0].length<=0)return 0;
        boolean oneflag = false;
        boolean twoflag = false;
        for(int i = 0;i<grid.length;i++){
            for(int j = 0;j<grid[i].length;j++){
                if(grid[i][j]==1)oneflag =true;
                else if(grid[i][j]==2 )twoflag =true;
                
            }
        }
        if(oneflag==false)return 0;
        if(twoflag==false)return -1;

        //solve
        for(int i = 0;i<grid.length;i++){
            for(int j = 0;j<grid[i].length;j++){
                if(grid[i][j]==2){
                    dfs(grid,i,j,2);
                }
            }
        }

        int min = Integer.MIN_VALUE;
        for(int i = 0;i<grid.length;i++){
            for(int j = 0;j<grid[i].length;j++){
                if(grid[i][j]==1) return -1;
                if(grid[i][j]!=0) min = Math.max(min,grid[i][j]);
            }
        }
        return min-2;
    }
    private void dfs (int[][] grid,int i,int j,int level){
        if (i < 0 || i >= grid.length || j < 0 || j >= grid[0].length ) return;
        if (grid[i][j] != 1 && grid[i][j] < level) { // 只有新鲜橘子或者传播路径比当前路径长的橘子,才继续进行传播。
            return;
        }
        grid[i][j] = level; // 将传染路径的长度存到grid[i][j]中
        level++;
        dfs(grid,i - 1, j, level);
        dfs(grid,i + 1, j, level);
        dfs(grid,i, j - 1, level);
        dfs(grid,i, j + 1, level);
    }
}

🟡3. 课程表(待定)

题目链接:https://leetcode.cn/problems/course-schedule/description/?envType=study-plan-v2&envId=top-100-liked

class Solution {
    public boolean canFinish(int numCourses, int[][] prerequisites) {
        if(prerequisites.length<=1)return true;
        int [] task = new int[numCourses];
        for(int i = 0;i<prerequisites.length;i++){
            task[prerequisites[i][0]]++;
        }
        boolean[] removed = new boolean[prerequisites.length];
        int removenum = 0;
        while(removenum < prerequisites.length){
            int currRemove = 0;// 本轮移除的元素数量
            for(int i =0;i<prerequisites.length;i++){
                if(removed[i]) continue;
                if(task[prerequisites[i][1]]==0){
                    task[prerequisites[i][0]]--;
                    removed[i] = true;
                    currRemove++;
                }
                
            }
            if (currRemove == 0) return false;// 如果一轮跑下来一个元素都没移除,则没必要进行下一轮
            removenum += currRemove;
        }
        return true;
    }
}

🟡4. 实现Trie (前缀树)

题目链接:https://leetcode.cn/problems/implement-trie-prefix-tree/description/?envType=study-plan-v2&envId=top-100-liked

class TrieNode{
    public boolean isWord;
    public TrieNode [] children;
    public TrieNode(){
        isWord = false;
		children = new TrieNode[26];
    }
}
class Trie {
    private TrieNode trienode;
    public Trie() {
        trienode = new TrieNode();
    }
    public void insert(String word) {
        TrieNode temp = trienode;
        for(int i = 0;i<word.length();i++){
            if(temp.children[word.charAt(i)-'a']==null)
                temp.children[word.charAt(i)-'a'] = new TrieNode();
            temp = temp.children[word.charAt(i)-'a'];
        }
        temp.isWord = true;

    }
    
    public boolean search(String word) {
        TrieNode temp = trienode;
        for(int i = 0;i<word.length();i++){
            temp = temp.children[word.charAt(i)-'a'];
            if(temp==null)return false;
        }
        return temp.isWord;
    }
    
    public boolean startsWith(String prefix) {
        TrieNode temp = trienode;
        for(int i = 0;i<prefix.length();i++){
            temp = temp.children[prefix.charAt(i)-'a'];
            if(temp==null)return false;
        }

        return true;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

量子计算+HPC!ORNL与Riverlane、Rigetti合作研发

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 编辑丨慕一 编译/排版丨沛贤 1000字丨8分钟阅读 近日&#xff0c;英国量子计算初创公司Riverlane和美国量子计算公司Rigetti Computing宣布将参与由美国能源部橡树岭国家实验室&#xff08;OR…

day03vue学习

day03 一、今日目标 1.生命周期 生命周期介绍生命周期的四个阶段生命周期钩子声明周期案例 2.综合案例-小黑记账清单 列表渲染添加/删除饼图渲染 3.工程化开发入门 工程化开发和脚手架项目运行流程组件化组件注册 4.综合案例-小兔仙首页 拆分模块-局部注册结构样式完善…

sheng的学习笔记-AI-残差网络-Residual Networks (ResNets)

目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 非常非常深的神经网络&#xff0c;网络发生了退化&#xff08;degradation&#xff09;的现象&#xff1a;随着网络层数的增多&#xff0c;训练集loss逐渐下降&#xff0c;然后趋于饱和&#xff0c;当你再增加网络深度的话&am…

【C++初阶】第七站:string类的初识(万字详解、细节拉满)

前言&#xff1a; &#x1f4cd;本文知识点&#xff1a;string的初识 本专栏&#xff1a;C 目录 一、什么是STL 二、STL的六大组件 三、STL的缺陷 四、为什么学习string类&#xff1f; 五、标准库中的string类 1、string类(了解) 2、string类的常用接口说明&#xff08;…

最新Java面试题2【2024初级】

下载链接&#xff1a;博主已将以上这些面试题整理成了一个面试手册&#xff0c;是PDF版的 互联网大厂面试题 1&#xff1a;阿里巴巴Java面试题 2&#xff1a;阿里云Java面试题-实习生岗 3&#xff1a;腾讯Java面试题-高级 4&#xff1a;字节跳动Java面试题 5&#xff1a;字…

如何通过ETL做数据转换

在数字化时代&#xff0c;数据被誉为新时代的石油&#xff0c;而数据的价值往往隐藏在海量数据背后的信息中。然而&#xff0c;海量的原始数据并不总是直接可用的&#xff0c;这就需要一种有效的工具来对数据进行提取、转换和加载&#xff08;ETL&#xff09;&#xff0c;从而将…

【排序】快速排序

原理 对于一个数组x&#xff0c;快速排序流程如下&#xff1a; 确定分界点a&#xff0c;可以取x[l]、x[r]、x[l r / 2]、随机&#xff08;四种都可以&#xff09;调整区间&#xff0c;使得&#xff1a;区间被分成 < a 和 > a的两部分&#xff0c;左边 < a&#xff…

转录因子/组蛋白修饰靶基因数据库:Cistrome DB使用教程

最近有小伙伴经常询问怎么预测转录因子的下游靶基因&#xff0c;以及预测一些组蛋白修饰影响的靶基因信息。今天就给大家介绍一下Cistrome数据浏览器&#xff08;Cistrome Data Browser&#xff09;。 Cistrome DB是来自人类和小鼠的ChIP-seq、ATAC-seq和DNase-seq数据的资源&…

huawei 华为交换机 配置手工模式链路聚合示例

组网需求 如 图 3-21 所示&#xff0c; SwitchA 和 SwitchB 通过以太链路分别都连接 VLAN10 和 VLAN20 的网络&#xff0c;SwitchA 和 SwitchB 之间有较大的数据流量。 用户希望SwitchA 和 SwitchB 之间能够提供较大的链路带宽来使相同 VLAN 间互相通信。 同时用户也希望能够提…

京津冀自动驾驶产业盛会“2024北京国际自动驾驶技术展览会”

随着科技的飞速发展&#xff0c;自动驾驶技术成为了汽车产业变革的热点和前沿。智能化、网联化已经成为推动汽车产业创新发展的重要力量&#xff0c;而自动驾驶技术则是其中的关键一环。它不仅能够提高道路安全性、缓解交通拥堵&#xff0c;还能为乘客带来更加舒适、便捷的出行…

【数据结构和算法初阶(C语言)】二叉树的顺序结构--堆的实现/堆排序/topk问题详解---二叉树学习日记②

目录 ​编辑 1.二叉树的顺序结构及实现 1.1 二叉树的顺序结构 2 堆的概念及结构 3 堆的实现 3.1堆的代码定义 3.2堆插入数据 3.3打印堆数据 3.4堆的数据的删除 3.5获取根部数据 3.6判断堆是否为空 3.7 堆的销毁 4.建堆以及堆排序 4.1 升序建大堆&#xff0c;降序建小堆 4.2堆…

AR/MR产品设计(二):如何用一双手完成与虚拟对象的自然交互

AR/MR产品设计&#xff08;二&#xff09;&#xff1a;如何用一双手完成与虚拟对象的自然交互 - 知乎 手是我们与现实世界交互最重要的方式&#xff0c;同样在虚实混合的世界中是最重要的交互方式 在AR/MR/VR的交互中&#xff0c;手势交互会作为XR的重要交互动作&#xff0c;因…

C++_day6

思维导图&#xff1a; 2试编程 封装一个动物的基类&#xff0c;类中有私有成员: 姓名&#xff0c;颜色&#xff0c;指针成员年纪 再封装一个狗这样类&#xff0c;共有继承于动物类&#xff0c;自己拓展的私有成员有:指针成员:腿的个数(整型 int count)&#xff0c;共有成员函数…

Qt5.14.2 深入理解Qt多线程编程,掌握线程池架构实现高效并发

在高并发的软件系统中&#xff0c;多线程编程是解决性能瓶颈和提高系统吞吐量的有效手段。作为跨平台的应用程序开发框架&#xff0c;Qt为我们提供了强大的多线程支持。本文将深入探讨Qt多线程编程的实现细节&#xff0c;并介绍线程池的设计思想&#xff0c;帮助读者彻底掌握Qt…

【低照度图像增强系列(3)】EnlightenGAN算法详解与代码实现

前言 ☀️ 在低照度场景下进行目标检测任务&#xff0c;常存在图像RGB特征信息少、提取特征困难、目标识别和定位精度低等问题&#xff0c;给检测带来一定的难度。 &#x1f33b;使用图像增强模块对原始图像进行画质提升&#xff0c;恢复各类图像信息&#xff0c;再使用目标检…

房产销售平台|基于Spring cloud+ Mysql+Java+ Tomcat的房产销售平台设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;ssm&#xff0c;springboot的平台设计与实现项目系统开发资源&#xff08;可…

ONLYOFFICE文档8.0全新发布:私有部署、卓越安全的协同办公解决方案

ONLYOFFICE文档8.0全新发布&#xff1a;私有部署、卓越安全的协同办公解决方案 文章目录 ONLYOFFICE文档8.0全新发布&#xff1a;私有部署、卓越安全的协同办公解决方案摘要&#x1f4d1;引言 &#x1f31f;正文&#x1f4da;一、ONLYOFFICE文档概述 &#x1f4ca;二、ONLYOFFI…

数字创新的引擎:探索Web3的前沿科技和商业模式

随着数字化时代的不断发展&#xff0c;Web3作为下一代互联网的重要组成部分&#xff0c;正逐渐成为数字创新的引擎。本文将深入探讨Web3的前沿科技和商业模式&#xff0c;揭示其在数字创新领域的重要作用和潜力。 1. 区块链技术的革命性 Web3的核心是区块链技术&#xff0c;它…

GitLab/Github从头开始配置秘钥

1、下载git安装包 CNPM Binaries Mirrorhttps://registry.npmmirror.com/binary.html?pathgit-for-windows/ 拉到页面最底部选择 点进文件夹下载32位或者64位的版本&#xff0c;我的是64位就选择64的版本进行安装 2、傻瓜式安装 3、在相应的文件夹右键选择 UserName为你的用…

Java 学习和实践笔记(40):String类详解

示例代码&#xff1a; public class TestString {public static void main(String[] args) {String s0 null;//这是什么都没有&#xff0c;连对象都没有&#xff0c;也就是指针还没有指到某一个地址String s1 "";//这是有对象了&#xff08;指针已指向某一个地址了…
最新文章