【LeetCode-面试经典150题-day21】

news2024/10/6 8:28:35

目录

120.三角形最小路径和

 64.最小路径和

63.不同路径Ⅱ

 5.最长回文子串


 

120.三角形最小路径和

题意:

给定一个三角形 triangle ,找出自顶向下的最小路径和。

每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。

【输入样例】triangle = [[2],[3,4],[6,5,7],[4,1,8,3]]

【输出样例】11

解题思路:

1. 定义一个新的二维list,list[j][i]表示在第j行中,下标为i处得到的最小路径和为多少

2. 边遍历triangle边计算,直到整个triangle遍历完毕,输出最后一行的最小值即可

3. 动态规划的规律,是triangle[j][i] += min(list[j-1][i-1],list[j-1][i]),初始是list[0][0]=triangle[0][0];

class Solution {
    public int minimumTotal(List<List<Integer>> triangle) {
        int len = triangle.size();//共有多少行;
        int[][] list = new int[len][len];

        list[0][0] = triangle.get(0).get(0);
        
        for(int j = 1;j < len; ++j){
            list[j][0] = triangle.get(j).get(0)+list[j-1][0];
            for(int i= 1; i < j; ++i){
                //普通情况
                list[j][i] = triangle.get(j).get(i)+Math.min(list[j-1][i-1],list[j-1][i]);
            }
            list[j][j] = triangle.get(j).get(j)+list[j-1][j-1];
        }
        int  result = Integer.MAX_VALUE;
        for(int i = 0;i< len;++i){
            result = Math.min(result,list[len-1][i]);
        }
        return result;
    }
}

时间: 击败了77.67%

内存: 击败了42.52%

 64.最小路径和

题意:

给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步。

【输入样例】grid = [[1,3,1],[1,5,1],[4,2,1]]

【输出样例】7

解题思路:

1. 定义一个新的二维list,list[i][j]表示在第i行中第j列得到的最小路径和是多少

2. 边遍历grid边计算,直到整个grid遍历完毕,输出list[m-1][n-1]即可

3. 动态规划的规律,是list[i][j] = grid[i][j] + Math.min(list[i-1][j],list[i][j-1]);

4. 动态规划的初始化,只能向下或向右走,那么第一行,第一列的值是固定的,list[0][0] = grid[0][0]; list[0][j] = list[0][j-1]+grid[0][j]; list[i][0] = list[i-1][0]+grid[i][0]

class Solution {
    public int minPathSum(int[][] grid) {
        int m = grid.length;
        int n = grid[0].length;
        int[][] list = new int[m][n];
        list[0][0] = grid[0][0];
        for(int i=1;i<m;++i){
            //第一列赋值
            list[i][0] = list[i-1][0] + grid[i][0];
        }
        for(int j=1;j<n;++j){
            //第一行赋值
            list[0][j] = list[0][j-1] + grid[0][j];
        }
        for(int i = 1; i< m; ++i){
            for(int j = 1; j < n; ++j){
                list[i][j] = grid[i][j] + Math.min(list[i-1][j],list[i][j-1]);
            }
        }
        return list[m-1][n-1];
    }
}

时间: 击败了93.62%

内存: 击败了18.20%

63.不同路径Ⅱ

题意:

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。

现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?

网格中的障碍物和空位置分别用 1 和 0 来表示。

【输入样例】obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]

【输出样例】2

解题思路:

1. 定义一个新的二维list,list[i][j]表示走到第i行中第j列的路径数

2. 边遍历obstacleGrid边计算,直到整个obstacleGrid遍历完毕,输出list[m-1][n-1]即可

3. 动态规划的规律,是当obstacleGrid[i][j] == 0时 list[i][j] = list[i-1][j]+list[i][j-1];路径数要相加,

如果obstacleGrid[i][j]==1 ,将list[i][j] 赋值为0

4. 动态规划的初始化,list[0][0] = 1; 只能向下或向右走,那么第一行,第一列的值是固定的,如果说第一行和第一列没有障碍,全部都为1,如果存在障碍,障碍之后的都为0.

class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int m = obstacleGrid.length;
        int n = obstacleGrid[0].length;
        int[][] list = new int[m][n];
        if(obstacleGrid[0][0] == 1 || obstacleGrid[m-1][n-1] == 1){
            return 0;
        }
        list[0][0] = 1;
        
        for(int i=1;i<m && obstacleGrid[i][0] == 0;++i){
            //开始判断第一列的初始值
            list[i][0] = 1;
        }
        for(int j=1;j<n &&  obstacleGrid[0][j] == 0 ;++j){
            //开始判断第一行的初始值
            list[0][j] = 1;
        }
        //开始剩余格子的路径数
        for(int i=1;i < m; ++i){
            for(int j=1; j < n; ++j){
                list[i][j] = obstacleGrid[i][j] == 1 ? 0 : list[i-1][j]+list[i][j-1];
            }
        }
        return list[m-1][n-1];
    }
}

时间: 击败了100.00%

内存: 击败了29.85%

 5.最长回文子串

题意:

给你一个字符串 s,找到 s 中最长的回文子串。

如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

提示:

  • 1 <= s.length <= 1000
  • s 仅由数字和英文字母组成

【输入样例】s="babad"

【输出样例】"bab" 或 "aba"

解题思路:

这题,嗯,做不太出来,参考了官方解题

自己就是把理解的地方多写了一点备注

class Solution {
    public String longestPalindrome(String s) {
        int len = s.length();
        if(len < 2){
            return s;
        }

        int maxLen = 1;
        int begin = 0;
        //dp[i][j]表示s[i..j]是否是回文串
        boolean[][] dp = new boolean[len][len];
        //初始化,所有长度为1的字串都是回文串
        for(int i=0; i<len; ++i){
            dp[i][i] = true;
        }

        char[] charArray = s.toCharArray();
        //先枚举字串长度
        for(int L = 2; L <= len; L++){
            //枚举左边界
            for(int i=0; i< len; ++i){
                //由L和i确定右边界,即j-i+1=L
                int j = L + i - 1;
                //如果右边界越界,就可以退出当前循环
                if(j >= len){
                    break;
                }
                if(charArray[i] != charArray[j]){
                    dp[i][j] = false;
                }else{
                    if(j-i < 3){
                        //这种情况一定是回文串
                        //j-i=0,表示只有一个字符x
                        //j-i=1,两个字符xx,这里已知相等
                        //j-i=2,三个字符,已知最左和最右相等,中间无所谓,即xyx
                        dp[i][j] = true;
                    }else{
                        //此时其是不是回文串,取决于中间部分是不是回文串
                        dp[i][j] = dp[i+1][j-1];
                    }
                }
                if(dp[i][j] && j-i+1>maxLen){
                    maxLen = j-i+1;
                    begin = i;
                }
            }
        }
        return s.substring(begin,begin+maxLen);
    }
}

时间: 击败了22.23%

内存: 击败了30.02%

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

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

相关文章

【项目 计网10】4.28 poll API介绍及代码编写

文章目录 4.28 poll API介绍及代码编写代码实现 4.28 poll API介绍及代码编写 #include <poll.h> struct pollfd{int fd;//委托内核检测的文件描述符short events;//委托内核检测文件描述符的什么事件short revents;//文件描述符实际发生的事件 }; int poll(struct poll…

【ARM CoreLink CCI-400 控制器简介】

文章目录 CCI-400 介绍 CCI-400 介绍 CCI&#xff08;Cache Coherent Interconnect&#xff09;是ARM 中 的Cache一致性控制器。 CCI-400 将 Interconnect 和coherency 功能结合到一个模块中。它支持多达两个ACE master 点的interface&#xff0c;例如&#xff1a; Cortex-A…

Verilog零基础入门(边看边练与测试仿真)-笔记

文章目录 第一讲第二讲第三讲第四讲 第一讲 1、testbench 没有端口&#xff0c;所以没括号 2、testbench 输入端 之后要变动 所以定义为reg 3、#10 &#xff1a;过10个时间单位 &#xff1b;’timescale 1ns/10ps 即 1ns 的时间单位 10ps的时间精度 4、reg 型变量赋值的时候 用…

若依新建模块

下面介绍如何在若依框架下新建一个子模块 第一步&#xff1a; 如图操作&#xff1a; 1. 2. 3. 4.在刚建立的子模块的pom.xml文件添加通用工具依赖 代码&#xff1a; <dependencies> <!-- 导入通用工具--><dependency><groupId>com.rchuing&l…

C语言文本为什么不包括库函数和预处理命令

C语言的文本不包括库函数和预处理命令 是因为库函数和预处理命令并不是C语言本身的一部分&#xff0c; 它们是由C语言标准库和预处理器提供的功能。 C语言标准库是一组预定义的函数和常量&#xff0c; 用于提供常见的功能&#xff0c;如输入输出、字符串处理、数学计算等。 …

【深入解析spring cloud gateway】06 gateway源码简要分析

上一节做了一个很简单的示例&#xff0c;微服务通过注册到eureka上&#xff0c;然后网关通过服务发现访问到对应的微服务。本节将简单地对整个gateway请求转发过程做一个简单的分析。 一、核心流程 主要流程&#xff1a; Gateway Client向 Spring Cloud Gateway 发送请求请求…

普通用户使用spark的client无法更新Ranger策略

普通用户使用spark的client无法更新Ranger策略 报错图片&#xff1a; WARN org.apache.ranger.admin.client.RangerAdminRESTClient: Error getting Roles. secureModetrue, usercaojianxiangUCDIPA.VIATRIS.CC (auth:KERBEROS)&#xff0c;responsef"httpStatusCode&quo…

ToBeWritten之基于ATTCK的模拟攻击:闭环的防御与安全运营

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 转移发布平台通知&#xff1a;将不再在CSDN博客发布新文章&#xff0c;敬…

react使用hook封装一个tab组件

目录 react使用hook封装一个tab组件Tabbar.jsx使用组件效果 react使用hook封装一个tab组件 Tabbar.jsx import PropsTypes from "prop-types"; import React, { useEffect, useState } from react; export default function Tabbar(props) {const { tabData , cur…

华为云银河麒麟V10安装libmcrypt

本次安装是在华为云上执行。cpu是鲲鹏&#xff0c;操作系统是银河麒麟V10. 先下载安装包&#xff1a; wget http://downloads.sourceforge.net/mcrypt/libmcrypt-2.5.8.tar.gz 解包&#xff0c;进入目录中。 执行如下命令&#xff1a; ./configure make make install 执…

软件开发模型汇总

1. 软件模型 在计算机刚刚诞生的年代&#xff0c;计算机是一种只有天才才能掌握的工具。人们对计算机的认知仅仅停留在程序的层面上&#xff0c;所谓的软件开发就是这些能够掌握计算机的天才们写的一些只能计算的二进制序列而已。但是随着技术的发展&#xff0c;软件的复杂度不…

K8S:二进制部署K8S(两台master+负载均衡nginx+keepalived)

文章目录 一.常见的K8S部署方式1.Minikube2.Kubeadmin3.二进制安装部署 二.二进制搭建K8S(双台master)1.部署架构规划2.系统初始化配置3.部署 docker引擎4.部署 etcd 集群&#xff08;1&#xff09;etcd简介&#xff08;2&#xff09;准备签发证书环境&#xff08;3&#xff09…

CNN详细讲解

CNN(Convolutional Neural Network) 本文主要来讲解卷积神经网络。所讲解的思路借鉴的是李宏毅老师的课程。 CNN&#xff0c;它是专门被用在影像上的。 Image Classification 我们从影像分类开始说起。 我们举例来说&#xff0c;它固定的输入大小是100*100的解析度&#x…

初识Maven(一)命令行操作和idea创建maven工程

Maven 是 Apache 软件基金会组织维护的一款专门为 Java 项目提供**构建**和**依赖**管理支持的工具。 构建过程包含的主要的环节&#xff1a;- 清理&#xff1a;删除上一次构建的结果&#xff0c;为下一次构建做好准备 - 编译&#xff1a;Java 源程序编译成 *.class 字节码文件…

服务端请求伪造(SSRF)

文章目录 渗透测试漏洞原理服务端请求伪造1. SSRF 概述1.1 SSRF 场景1.1.1 PHP 实现 1.2 SSRF 原理1.3 SSRF 危害 2. SSRF 攻防2.1 SSRF 利用2.1.1 文件访问2.1.2 端口扫描2.1.3 读取本地文件2.1.4 内网应用指纹识别2.1.5 攻击内网Web应用 2.2 SSRF 经典案例2.2.1 访问页面2.2.…

电脑怎么设置定时关机,2个简单的操作

电脑作为现代生活中不可或缺的工具&#xff0c;我们通常会在工作或娱乐过程中使用它。但有时候&#xff0c;我们可能需要在一段时间后自动关机&#xff0c;例如在下载完成后或在睡觉前。那么电脑怎么设置定时关机呢&#xff1f;为了满足这种需求&#xff0c;电脑提供了多种定时…

2023年铁路行业研究报告

第一章 行业概况 1.1 定义 铁路行业&#xff0c;依照全球行业分类标准&#xff08;GICS&#xff09;的划分&#xff0c;被归属为交通运输行业的一部分。该行业主要由提供乘客和货物铁路运输服务的公司构成。铁路行业涵盖各类铁路运输服务&#xff0c;包括城市铁路系统&#x…

32 实验三十二、OCL电路的研究

一、题目 仿真电路如图1所示。利用 Multisim 研究下列问题&#xff1a; &#xff08;1&#xff09;负载 R 6 R_6 R6​ 上能获得的最大输出功率&#xff1b; &#xff08;2&#xff09;电容 C 1 C_1 C1​、 C 2 C_2 C2​ 的作用&#xff1b; &#xff08;3&#xff09;当输入…

QTday5(QT连接TCP通信)

一、Xmind整理&#xff1a; C语言中的通信协议&#xff1a; 二、上课笔记整理&#xff1a; 1.QT中的服务器端的操作&#xff1a; .pro文件&#xff1a; 头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务…

OpenCV:实现图像的负片

负片 负片是摄影中会经常接触到的一个词语&#xff0c;在最早的胶卷照片冲印中是指经曝光和显影加工后得到的影像。负片操作在很多图像处理软件中也叫反色&#xff0c;其明暗与原图像相反&#xff0c;其色彩则为原图像的补色。例如&#xff0c;颜色值A与颜色值B互为补色&#…