hot100-

力扣hot100二刷——链表 第二次刷题不在idea写代码,而是直接在leetcode网站上写,“逼”自己掌握常用的函数。 阅读详情

以下所有题解都参照了他人的解法,主要是灵神 

图论 

200. 岛屿数量(中等)

方法一、深度搜索

class Solution {
    public int numIslands(char[][] grid) {
        int n = grid.length,m = grid[0].length,res = 0;
        int [][] visited = new int[n][m];
        for(int i = 0; i < n;i++){
            for(int j = 0;j < m;j++){
                if(grid[i][j]== '1'){
                    DFS(grid,i,j);
                    res++;
                }
            }
        }
        return res;
    }
       public void DFS(char[][] grid,int x,int y){
        if(x<0 || x >= grid.length || y < 0 || y >= grid[0].length || grid[x][y] == '0'){
            return;
        }
        grid[x][y] = '0';
        DFS(grid,x-1,y);
        DFS(grid,x+1,y);
        DFS(grid,x,y-1);
        DFS(grid,x,y+1);
    }
}

方法二、广度搜索 

class Solution {
    public int numIslands(char[][] grid) {
        int n = grid.length,m = grid[0].length,res = 0;
        int [][] visited = new int[n][m];
        for(int i = 0; i < n;i++){
            for(int j = 0;j < m;j++){
                if(grid[i][j]== '1'){
                    BFS(grid,i,j);
                    res++;
                }
            }
        }
        return res;
    }
    public void BFS(char[][] grid, int x, int y){
        Deque<int[]> list = new LinkedList<>();
        list.add(new int[]{x,y});
        while(!list.isEmpty()){
            int[] cur = list.remove();
            x = cur[0];
            y = cur[1];
            if(x >=0 && x < grid.length && y >=0 && y < grid[0].length && grid[x][y] == '1'){
                grid[x][y] = '0';
                list.add(new int[]{x-1,y});
                list.add(new int[]{x+1,y});
                list.add(new int[]{x,y-1});
                list.add(new int[]{x,y+1});
            }
        }
    }
}

994. 腐烂的橘子(中等) 

方法一、广搜

一开始看成char数组了。。强调四个方向明显广搜

class Solution {
    private static final  int[][] dic={{-1,0},{1,0},{0,-1},{0,1}};
    public int orangesRotting(int[][] grid) {
        //bfs需要记录:新增的橘子数
        int n = grid.length,m = grid[0].length,fresh = 0;
        List<int[]> q = new ArrayList<>();
        for(int i = 0;i < n;i++){
            for(int j = 0;j < m;j++){
                if(grid[i][j] == 1)fresh++;
                if(grid[i][j] == 2)q.add(new int[]{i,j});
            }
        }
        int ans = 0;
        while(!q.isEmpty() && fresh>0){
            ans++;
            List<int[]> tmp = q;
            q = new ArrayList<>();
            for(int[] pos : tmp){
                for(int[] d : dic){
                    int x = pos[0] + d[0],y = pos[1] + d[1];
                    if(x >= 0 && x < n && y >= 0 && y < m && grid[x][y] == 1){
                        grid[x][y] = 2;
                        fresh--;
                        q.add(new int[]{x,y});
                    }
                }

            }
        }
        return fresh == 0 ? ans : -1;
    }
}

207. 课程表(中等)

 

方法一、DFS

链表一条路走到黑所以是dfs,其实就是建图然后判断成环,这里的建有向图用了链表的方式,而不是矩阵。之所以不用之前快慢指针,是因为比较复杂,那个只适用于单条链表。中途出了一个比较大的问题,第一个for循环写成0-numCourses了,其实pre数组未必那么长

class Solution {
    public boolean canFinish(int numCourses, int[][] prerequisites) {
        int[] color = new int[numCourses];
        List<Integer>[] map = new ArrayList[numCourses];
        Arrays.setAll(map,i->new ArrayList<>());
        for(int[] p : prerequisites){
            map[p[1]].add(p[0]);//对于pre每个前置课程对应的链表,后面加
        }
        for(int i = 0;i < numCourses;i++){
            if(DFS(i,map,color)){
                return false;
            }
        }
        return true;

    }
public boolean DFS(int x,List<Integer>[] list,int[] color){
        color[x] = 1;//访问中
        for(int a : list[x]){
            if(color[a] == 1 || (color[a] == 0 && DFS(a,list,color))){
                return true;
            };
        }
        color[x] = 2;//递归完了恢复现场
        return false;
    }
    
}


208. 实现 Trie (前缀树)(中等) 

方法一、二十六叉树

主要难度是设计新的数据结构

class Node{
    Node[] son = new Node[26];
    boolean end;
}
class Trie {
    private Node root;
    public Trie() {
        root = new Node();
        root.end = true;
    }

    public void insert(String word) {
        Node cur = root;
        int n = word.length();
        for(int i = 0;i < n;i++){
            int c = word.charAt(i)-'a';
            if(cur.son[c] == null){
                cur.son[c] = new Node();
            }
            cur = cur.son[c];
        }
        cur.end = true;
    }
    private int find(String word){
        Node cur = root;
        int n = word.length();
        for(int i = 0;i < n;i++){//遍历
            int c = word.charAt(i)-'a';
           if(cur.son[c] == null)return 0;
           cur = cur.son[c];
        }
        if(cur.end){//正好结尾
            return 2;
        }else{
            return 1;
        }
    }
    public boolean search(String word) {
        return find(word) == 2;
    }

    public boolean startsWith(String prefix) {
        return find(prefix) > 0;
    }
}

碎碎念

之后就不每次都放复杂度了,除非两个方法性能差很多

①学会了方向数组,bfs更简洁

②学会了这种技巧

  List<Integer>[] g = new ArrayList[numCourses];
        Arrays.setAll(g, i -> new ArrayList<>());

作者:灵茶山艾府
链接:https://leetcode.cn/problems/course-schedule/solutions/2992884/san-se-biao-ji-fa-pythonjavacgojsrust-by-pll7/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

③一直感觉Deque模拟栈、linkedlist模拟队列很神奇,所以搜了搜

总结:deque更高效灵活,stack设计比较过时 

 

 

前端JavaScript力扣HOT100刷题【51-100】 注:纯手打,如有错误欢迎评论区交流!编写此文是为了更好地学习前端知识,如果损害了有关人的利益,请联系删除!本文章将不定时更新,敬请期待!!!!! 阅读详情

相关推荐

matlab液体湿润模拟,【水文模型】01 三水源新安江模型

目录一、概述1.1 流域概况1.2 产流方式论证1.3 设计基本任务1.4 设计原始资料二、新安江模型2.1 流域划分2.2 产汇流计算2.2.1 蒸散发计算2.2.2 产流计算2.2.3 水源划分2.2.4 汇流计算2.3 模型参数2.3.1 参数物理意义2.3.2 参数率定结果2.4 模拟结果2.4.1 精度统计表2.4.2 计算与实测流量过程线比较三、精度统计与误差分析3.1 精度统计3.2...

weixin_34173656的博客 5327

力扣HOT100合集

对于当前考虑的元素 nums[i],如果 dp[ j - nums[ i ] ] 为 true,说明可以用前面的元素构成和为 j -nums[ i ] 的子集,那么在加上当前元素 nums[ i ] 的情况下,就可以构成和为 j 的子集,因此 dp[ j ] 更新为 true。这样left往回走会导致错误的结果。最终得到的结果为[[1, 2, 3], [2, 1, 3], [3, 1, 2], [1, 3, 2], [2, 3, 1], [3, 2, 1]],即给定数组[1, 2, 3]的全排列结果。

qq_61504864的博客 5884

UniApp实战:5分钟搞定后台持续定位与轨迹实时更新(附完整代码)

本文详细介绍了在UniApp中实现后台持续定位与动态轨迹地图系统的完整方案。针对物流配送、运动健身等场景,文章深入讲解了权限申请、坐标系选择、定位防抖优化、地图轨迹线(polyline)实时绘制等核心步骤,并提供了可复用的完整代码,帮助开发者高效解决App切后台定位停止、轨迹漂移等常见难题。

weixin_29266679的博客 483

leetcode HOT100总结

本人菜鸡一枚,历时两个月时间把HOT100题做完(Ctrl C-V)了,做完之后还是感觉到很虚,很多中等题还是不会做,于是乎花几天时间把这100题给总结一下。一方面,对自己的知识梳理;另一方面,便于后续回顾。(完成度99,是因为有一道题目收费,没有做!哈哈哈!)以下所有题目都是用Python3实现的。 下面是对这些题目按照算法进行分类整体,主要包括排序、哈希表、递归\回溯、链表、双指针、动态规划、二分查找、贪心、树、深度优先搜索、广度优先搜索等。 在整理之前,先学习一下Python的基本数据类型有哪些,请

qq_36561737的博客 4751

薛定谔虚拟筛选实战:如何用PDB文件快速构建受体格点(避坑指南)

本文提供了薛定谔虚拟筛选实战指南,聚焦于如何从PDB文件快速、精准地构建受体格点。文章详细解析了可变残基的理性处理策略、基于配体尺寸的盒子量化设置方法,并分享了高级约束与排除体积的实战技巧,旨在帮助用户避开常见陷阱,提升虚拟筛选的成功率与效率。

weixin_28419039的博客 254

4G LTE 与 5G 无线网络规划对比:从 BBU/RRU 到 CU/DU/AAU 的架构演进解析

本文深度解析4G LTE与5G无线网络架构的演进差异,从BBU/RRU分立式架构到CU/DU/AAU三级重构,揭示移动通信代际跃迁的技术本质。重点对比了网络规划中的覆盖能力、容量规划、传输网络等九大维度,为通信工程师提供实用的技术对照手册,助力5G网络高效部署。

weixin_32821533的博客 289

力扣hot100

因为 HashSet 使用的是对象的引用进行比较,所以如果两个节点是同一个节点(即内存地址相同),HashSet 会检测到这个重复的引用,从而判断链表中存在环。我的思路是通过排序后的字符串作为哈希表的键,将原字符串作为值添加到相应的键对应的列表中。否则,更新 merged 列表中最后一个区间的结束值。思路是通过遍历两个链表,计算对应节点值与进位的和,处理进位并构建新链表,最后返回不含虚拟头节点的结果链表。评论区看到一个【还有句话:走到尽头见不到你,于是走过你来时的路,等到相遇时才发现,你也走过我来时的路。

分享技术,分享经验 1971

27-eMMC电路设计

eMMC硬件电路设计

weixin_66510961的博客 4008

HOT100总结

第一题:

m0_46085335的博客 581

PCL 基于视椎体裁剪点云

PCL 基于视椎体裁剪点云

dayuhaitang1的博客 4083

ROS机器人未知环境自主探索功能包explore_lite总结

本系列文章主要针对ROS机器人常使用的未知环境自主探索功能包explore_lite展开全源码的详细解析,并进行概括总结。 本系列文章共包含六篇文章,前五篇文章主要介绍explore_lite功能包中 explore.cpp、costmap_tools.h、frontier_search.cpp、costmap_client.cpp等源码实现文件中全部函数的详细介绍,第六篇文章进行概括总结,包含自主探索功能包explore_lite的简介,实现未知环境自主探索功能的原理及流程总结,效果演示,使用功能包exp

慕羽★的博客 4461

Leetcode HOT 100 题目总结(已完结)

文章目录前引题目博客链接Easy No.1 - No.21 前引 这段时间感觉动态规划已经做伤了 就是真的没什么动力再做下去了 后面没做的也都是难的不行的dp题目了 想着还是要做的 这段时间换点口味 把力扣HOT 100题给全做了 写个总结 题目博客链接 Easy No.1 - No.21 461. 汉明距离 617. 合并二叉树 104. 二叉树的最大深度 206. 反转链表 169. 多数元素 21. 合并两个有序链表 ...

Love 6's Private Blog 1万+

大数据分析工具Power BI(二):Power BI下载安装和模块介绍

首先在Microsoft官方网站上下载PowerBI Desktop,然后进行安装。id=58494点击"Next"后会弹出下载框,进行下载即可,下载好的PowerBI名称为"PBIDesktopSetup_x64.exe",也可以在"资料"中获取安装包,双击安装包即可安装。

Lansonli(蓝深李)的博客 2320

LeetCode HOT100

力扣HOT100刷题记录1.两数之和2. 两数相加3.无重复字符的最长子串6. Z字形变换7.整数反转 1.两数之和 这道题比较简单,直接利用哈希map建立一个字典,然后遍历循环,当前面存的key存在等于target-nums[i],则返回找到的数字的索引。若不存在,则将键值对放入hashmap中。最后遍历结束如果还没找到,就返回一个int数组[0],空数组。 class Solution { public int[] twoSum(int[] nums, int target) {

jiandandian_的博客 1719

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

HOT100与剑指Offer

一个本硕双非的小菜鸡,备战24年秋招,计划刷完hot100和剑指Offer的刷题计划,加油!根据要求,每一道题都要写出两种以上的解题技巧。祝大家都能学有所成,找到一份好工作!

qq_43264167的博客 979

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

力扣HOT100题目

主要整理了力扣HOT100相关题目解析。后续有新的实现思路会不断完善。

qq_43227426的博客 557

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

力扣hot100分类整理及解题方法

对应力扣题号

lmh_qwq的博客 2643

力扣hot100_哈希

你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。是由重新排列源单词的所有字母得到的一个新单词。可以按任意顺序返回结果列表。整数,并返回它们的数组下标。给你一个字符串数组,请你将。请你设计并实现时间复杂度为。你可以按任意顺序返回答案。给定一个未排序的整数数组。,请你在该数组中找出。

weixin_47113960的博客 1403

LeetCode Hot100题解

链表的多数问题可以通过双指针(快慢指针、前后指针)高效解决。

2301_82023822的博客 2672

hot100——11,42

新手刷题自用记录

Utgnryk的博客 764
上一篇: hot100-141、142、148、146、136、169、75、31、287
下一篇: hot100-二叉树
Utgnryk
博客等级 码龄3年 820粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值