当前位置: 首页 > article >正文

leetcode刷题(71-75)

算法是码农的基本功,也是各个大厂必考察的重点,让我们一起坚持写题吧。

遇事不决,可问春风,春风不语,即是本心。

我们在我们能力范围内,做好我们该做的事,然后相信一切都事最好的安排就可以啦,慢慢来,会很快,向前走,别回头。

目录

1、简化路径

2、编辑距离

3、矩阵置零

4、搜索二维矩阵

5、颜色分类


1、简化路径

题目链接:. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=O83Ahttps://leetcode.cn/problems/simplify-path/description/

思路:利用栈的思想,先按照/划分字符串,然后按照依次进站,遇到..,当前栈顶字符串出栈,全部元素入栈后,依次从栈底出栈拼接。

class Solution {
    public String simplifyPath(String path) {
        String [] str = path.split("/");
        LinkedList<String> stack = new LinkedList<>() ;
        for(String s : str){
            if(s.equals("..")){
                if(!stack.isEmpty()){
                    stack.pop() ;
                }
            }else if(s.length() > 0 && !".".equals(s)){
                stack.push(s) ;
            }
        }
        StringBuilder sb = new StringBuilder("") ;
        if(stack.isEmpty()){
            return "/" ;
        }
        while(!stack.isEmpty()){
            sb.append("/") ;
            sb.append(stack.pollLast()) ;   
        }
        return sb.toString() ;
    }
}

2、编辑距离

题目链接:. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=O83Ahttps://leetcode.cn/problems/edit-distance/description/

思路:本质上是动态规划的思想:dp[i][j] 表示将word1从第i位置转换到word2的第j位置需要最少多少步,主要判断有两种场景:一种是word1与word2当前值相等与不等。

相等: dp[i][j] = dp[i-1][j-1]

不等:dp[i][j] = Math.min(dp[i-1][j-1] ,Math.min(dp[i-1][j],dp[i][j-1])) + 1 ;

class Solution {
    public int minDistance(String word1, String word2) {
        int n = word1.length(), m = word2.length() ;
        // dp[i][j] 表示将word1从第i位置转换到word2的第j位置需要最少多少步
        int [][] dp = new int [n+1][m+1] ;
        for(int j=1; j<=m; j++){
            dp[0][j] = j ;
        }
        for(int i=1; i<=n; i++){
            dp[i][0] = i ;
        }
        for(int i=1; i<=n; i++){
            for(int j=1; j<=m; j++){
                if(word1.charAt(i-1) == word2.charAt(j-1)){
                    dp[i][j] = dp[i-1][j-1] ;
                }else{
                    // 插入、删除、替换
                    dp[i][j] = Math.min(dp[i-1][j-1] ,Math.min(dp[i-1][j],dp[i][j-1])) + 1 ;
                }
            }
        }
        return dp[n][m] ;
    }
}

3、矩阵置零

题目链接:. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=O83Ahttps://leetcode.cn/problems/set-matrix-zeroes/description/

思路:用两个一维数组作为标记数组,标记出现0的行列,然后判断当前元素所在行列是否被标记,被标记的则置0.

class Solution {
    public void setZeroes(int[][] matrix) {
        int m = matrix.length, n = matrix[0].length ;
        boolean [] row = new boolean [m] ;
        boolean [] col = new boolean [n] ;
        for(int i=0; i<m; i++){
            for(int j=0; j<n; j++){
                if(matrix[i][j] == 0){
                    row[i] = true ;
                    col[j] = true ;
                }
            }
        }
        for(int i=0; i<m; i++){
            for(int j=0; j<n; j++){
                if(row[i] || col[j]){
                    matrix[i][j] = 0 ;
                }
            }
        }
    
    }
}

4、搜索二维矩阵

题目链接:. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=O83Ahttps://leetcode.cn/problems/search-a-2d-matrix/

思路1:按行循环遍历即可。两层循环。

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        for(int i=0; i<matrix.length; i++){
            for(int j=0; j<matrix[0].length; j++){
                if(matrix[i][j] == target){
                    return true ;
                }
                if(matrix[i][j] > target){
                    return false ;
                }
            }
        }
        return false ;
    }
}

思路2:从右上角向左侧和下方遍历,找到满足要求的数字,没找到则返回。

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int m = matrix.length , n = matrix[0].length ;
        int i = 0, j = n-1 ;
        while(i<m && j>=0){
            if(matrix[i][j]==target){
                return true ;
            }else if(matrix[i][j] > target){
                j -- ;
            }else{
                i ++ ;
            }
        }
        return false ;
    }
}

5、颜色分类

题目链接:. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=O83Ahttps://leetcode.cn/problems/sort-colors/description/

思路:比较交换法。依次把0和1交换到最左侧,剩下的就是2在最右侧。

class Solution {
    public void sortColors(int[] nums) {
        // Arrays.sort(nums) ;
        int j = 0 ;
        for(int i=0; i<nums.length; i++){
            if(nums[i]==0){
                swap(nums, i, j) ;
                j ++ ;
            }
        }
        for(int i=j; i<nums.length; i++){
            if(nums[i]==1){
                swap(nums, i, j) ;
                j ++ ;
            }
        }
    }
    public void swap(int [] nums, int i, int j){
        int tmp = nums[i] ;
        nums[i] = nums[j] ;
        nums[j] = tmp ;
    }
}


http://www.kler.cn/news/313896.html

相关文章:

  • ATMEGA328P芯片引脚介绍
  • 如何配置ssh key 到gitlab, 实现git push
  • 京东商品属性的详细api数据解析:颜色、尺寸与材质
  • 《深度学习》PyTorch框架 优化器、激活函数讲解
  • OpenHarmony(鸿蒙南向开发)——标准系统方案之瑞芯微RK3568移植案例(下)
  • 鸿蒙搭配前端开发:应用端与WEB端交互
  • 安卓数据存储——SQLite
  • VM16安装macOS11
  • 《线性代数》笔记
  • 精选写作技巧!分享4款ai写毕业论文可以写出公式表格的软件
  • windows安装docker、elasticsearch、kibana、cerebro、logstash
  • 西圣、吉玛仕、绿联电容笔好不好用?热门平替电容笔超真实测评!
  • 淘宝npm镜像源更新后,如何正常使用npm命令
  • Apache DolphinScheduler 跨工作流复杂依赖功能详解
  • 不要死磕技术,还是要产品化
  • go语言Map详解
  • 【图表如何自动排序】
  • RabbitMQ08_保证消息可靠性
  • 【在Linux世界中追寻伟大的One Piece】进程间关系与守护进程
  • React 的 useEffect 钩子,执行一些异步操作来加载基本信息
  • 【docker npm】npm 私库
  • 《高等代数》线性相关和线性无关(应用)
  • C++之职工管理系统(细节Q)
  • Spring Boot集成Akka remoting快速入门Demo
  • Spring-关于IOC的解释及相关理解(如何从三个方面理解)
  • 计算机人工智能前沿进展-大语言模型方向-2024-09-16
  • leetcode 380.O(1) 时间插入、删除和获取随机元素
  • 电脑ip会因为换了网络改变吗
  • JavaScript web API完结篇---多案例
  • Abp vNext(五)集成MQTTnet,可收发消息