【LeetCode热题100】打卡19天:最大数组和跳跃游戏

news2024/11/19 5:25:24

文章目录

  • 【LeetCode热题100】打卡第19天:最大数组和&跳跃游戏
    • ⛅前言
  • 最大数组和
    • 🔒题目
    • 🔑题解
  • 跳跃游戏
    • 🔒题目
    • 🔑题解

【LeetCode热题100】打卡第19天:最大数组和&跳跃游戏

⛅前言

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

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

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

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

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

Github地址📁:Chinafrfq · GitHub

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

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

最大数组和

🔒题目

原题链接:53. 最大子数组和

在这里插入图片描述

🔑题解

  • 解法一:暴力(内存超限,210个数据通过200个)

    import java.util.Arrays;
    import java.util.Collections;
    import java.util.List;
    import java.util.stream.Collectors;
    
    /**
     * @author ghp
     * @title 最大数组和
     */
    class Solution {
        public int maxSubArray(int[] nums) {
            List<Integer> list = Arrays.stream(nums).boxed().collect(Collectors.toList());
            for (int i = 0; i < nums.length; i++) {
                int sum = nums[i];
                for (int j = i + 1; j < nums.length; j++) {
                    sum += nums[j];
                    list.add(sum);
                }
            }
            return Collections.max(list);
        }
    }
    

    复杂度分析:

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

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

    不出所料,对于元素个数较少的情况,是可以通过的,但是遇到长度较大的时候会出现内存超限!

    在这里插入图片描述

    备注:Java规定一个方法编译后的字节码大小不能超过 65535 字节,这个长度在一般情况下都是够用的,但碰到极端情况就不行了

    /**
     * @author ghp
     * @title 最大数组和
     */
    class Solution {
        public int maxSubArray(int[] nums) {
            int max = Integer.MIN_VALUE;
            for (int i = 0; i < nums.length; i++) {
                if (nums[i] > max){
                    max = nums[i];
                }
            }
            for (int i = 0; i < nums.length; i++) {
                int sum = nums[i];
                for (int j = i + 1; j < nums.length; j++) {
                    sum += nums[j];
                    if (sum>max){
                        max = sum;
                    }
                }
            }
            return max;
        }
    }
    

    复杂度分析:

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

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

    这样写内存不超限了,但是时间超限!

  • 解法二:动态规划

    主要思路:因为我们是要求数组连续元素之和的最大值,所以每次我们在遍历数组时,有两种选择的可能性,要么是选择当前元素,要么是选择之前求的和加上当前元素。这样我们就可以得到一个递推式: M a t h . m a x ( s u m + n u m s [ i ] , n u m s [ i ] ) Math.max(sum+nums[i], nums[i]) Math.max(sum+nums[i],nums[i]),这里需要注意,我们要需要有一个变量来记录这个过程中出现的最大值,所以还应当有: M a t h . m a x ( m a x , s u m ) Math.max(max, sum) Math.max(max,sum)

    /**
     * @author ghp
     * @title 最大数组和
     */
    class Solution {
        public int maxSubArray(int[] nums) {
            int max = Integer.MIN_VALUE;
            int sum = 0;
            for (int i = 0; i < nums.length; i++) {
                sum = Math.max(sum+nums[i], nums[i]);
                max = Math.max(max, sum);
            }
            return sum;
        }
    }
    

    复杂度分析:

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

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

  • 解法三

跳跃游戏

🔒题目

原题链接:55.跳跃游戏

在这里插入图片描述

🔑题解

  • 解法一:BFS(时间超限)

    主要不断进行搜索遍历,然后因为这相当于是一个带权的树,只要树的权值之和等于数组长度-1,就说明数组的最后一个元素可达。否则就不可达。

在这里插入图片描述

/**
 * @author ghp
 * @title 跳跃游戏
 */
class Solution {

    static boolean f = false;

    public boolean canJump(int[] nums) {
        int path = 0;
        bfs(nums, path);
        return f;
    }

    private void bfs(int[] nums, int path) {
        if (path >= nums.length - 1) {
            // 当前可达距离>=数组最大长度,说明可到达最后一个元素,结束递归
            f = true;
            return;
        }
        for (int i = 1; i <= nums[path]; i++) {
            // 遍历下一层
            bfs(nums, path + i);
        }
    }
}

复杂度分析:

  • 时间复杂度: O ( n ! ) O(n!) O(n!)
  • 空间复杂度: O ( 1 ) O(1) O(1)

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

  • 解法二:贪心

    通过不断迭代,计算出当前可达的最大长度,只要最大长度超过数组的长度,就可以达到数组中的最后一个元素

    /**
     * @author ghp
     * @title 跳跃游戏
     */
    class Solution {
        public boolean canJump(int[] nums) {
            int max = Integer.MIN_VALUE;
            for (int i = 0; i < nums.length; i++) {
                if (i <= max){
                    // 当前距离是能够到达的
                    // 更新最大距离
                    max = Math.max(max, i + nums[i]);
                    if (max >= nums.length-1){
                        // 最大距离已经超过了数组的长度,所以可以到达最后一个元素
                        return true;
                    }
                }
            }
            return false;
        }
    }
    

    复杂度分析:

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

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

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

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

相关文章

A股市场全景分析系列—从每日涨停个股分析热门板块与题材

前言‍‍ 当前市场股票多但资金有限&#xff0c;因此已经无法出现全面上涨的行情。这样一来识别当前的“风口”显得尤为重要&#xff0c;也就是上车热门板块、热门题材、强势个股&#xff01; 因此聚焦分析涨停板个股显得尤为重要&#xff01; 我们统计了近&#xff15;个交易日…

【算法题解】38. 括号的生成

这是一道 中等难度 的题 https://leetcode.cn/problems/generate-parentheses/ 题目 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;["…

DNS隧道穿透

介绍&#xff1a; DNS隧道&#xff0c;是隧道技术中的一种。当我们的HTTP、HTTPS这样的上层协议、正反向端口转发都失败的时候&#xff0c;可以尝试使用DNS隧道。DNS隧道很难防范&#xff0c;因为平时的业务也好&#xff0c;使用也罢&#xff0c;难免会用到DNS协议进行解析&am…

线上问题记录20230610-NGINX代理大文件下载问题

线上问题记录20230610-NGINX代理大文件下载问题 问题描述 我们有一个在线项目&#xff1a;是一个对象文件存储服务&#xff0c;是用来给用户提供文件对象存储的。今天用户在使用的时候发现超过1G的文件无法进行下载。幸好今天是星期六&#xff0c;使用的人并不是特别多&#…

华为OD机试真题 JavaScript 实现【最长的连续子序列】【2022Q4 100分】

一、题目描述 有N个正整数组成的一个序列&#xff0c;给定一个整数sum&#xff0c;求长度最长的的连续子序列使他们的和等于sum&#xff0c;返回该子序列的长度&#xff0c;如果没有满足要求的序列返回-1。 二、输入描述 第1行有N个正整数组成的一个序列。 第2行给定一个整…

【LIN通讯出现问题】

LIN信号发出了&#xff0c;但是没有收到响应的原因 如果你发送了LIN&#xff08;局域网互连&#xff09;信号&#xff0c;但没有收到响应&#xff0c;可能有以下几个原因&#xff1a; 线路故障&#xff1a;检查信号线路是否连接正确&#xff0c;可能存在接触不良、开路或短路等…

【PCB专题】Allegro 单线、差分线自动绕等长功能介绍

在文章【PCB专题】案例:绕等长怎么直接以颜色区分看出是否绕好 中我们讲到Allegro 16.6版本的Timing Vision功能可以直接在PCB上以颜色的区分就能看出单线和差分是否已经绕成等长了,不再需要到规则管理器中去查看。 那么其实Allegro还有单线自动绕等长的功能——Auto interac…

mac电脑储存内存越来越小如何清理释放空间?

如果你是一位Mac系统的用户&#xff0c;可能会发现你的电脑储存空间越来越小。虽然Mac系统设计得非常优秀&#xff0c;但是系统数据和垃圾文件也会占据大量的储存空间。在这篇文章中&#xff0c;我们将探讨mac系统数据怎么这么大&#xff0c;以及mac清理系统数据怎么清理。 一…

# Telegraph-Image:利用Cloudflare Pages和Telegraph无成本创建自己的图床

Telegraph-Image&#xff1a;利用Cloudflare Pages和Telegraph无成本创建自己的图床 Telegraph-Image是一个具有以下特点的图像托管服务&#xff1a; 特点&#xff1a; 无限图片储存数量&#xff1a;你可以上传不限数量的图片&#xff0c;没有存储限制。免费托管&#xff1a…

chatgpt赋能python:Python中如何删除字符串中的标点符号

Python中如何删除字符串中的标点符号 概述 在Python中&#xff0c;字符串是一种基本数据类型&#xff0c;经常被用来存储和处理文本数据。在处理文本数据时&#xff0c;我们常常需要删除其中的标点符号。本文将介绍如何使用Python中的字符串处理方法来删除字符串中的标点符号…

[安卓广播入门][1]Android Studio接收系统广播

一、新建项目 二、增加权限 <uses-permission android:name"android.permission.ACCESS_NETWORK_STATE" />三、代码 public class MainActivity extends AppCompatActivity {private IntentFilter intentFilter;//过滤隐式意图private NetworkChangeReceiver…

【状态估计】变分贝叶斯近似的递归噪声自适应卡尔曼滤波(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【Spring框架】第一个Spring(创建和使用)

目录 Spring创建和使用创建创建一个Maven项目添加Spring框架支持(spring-context、spring-beans)添加启动类 存储Bean对象创建Bean将Bean注册到容器读取并使用Bean对象经典面试题&#xff1a;ApplicationContext和BeanFactory的区别是什么&#xff1f; Spring创建和使用 创建 …

SpringBoot-【回顾】

第一个SpringBoot程序 自动装配原理 Springboot的自动装配实际上就是为了从Spring.factories文件中获取到对应的需要进行自动装配的类&#xff0c;并生成相应的Bean对象&#xff0c;然后将它们交给Spring容器来帮我们进行管理 启动器&#xff1a;以starter为标记 EnableAuto…

C语言:给定两个数,求这两个数的最大公约数(新思路:辗转相除法)

题目&#xff1a; 从键盘输入两个数&#xff0c;求这两个数的最大公约数。 思路一&#xff1a;普通方法 总体思路&#xff1a; &#xff08;一&#xff09;. 生成相关变量&#xff1b; 从键盘输入两个数&#xff1b; 再使用 三目操作符&#xff08;条件操作符&#xff09; 找出…

树——“数据结构与算法”

各位CSDN的uu们好久不见呀&#xff0c;好久没有更新我的数据结构与算法专栏啦&#xff0c;现在&#xff0c;我要开始重拾丢下的知识啦&#xff0c;这次&#xff0c;小雅兰要给uu们介绍一个全新的数据结构&#xff0c;下面&#xff0c;就让我们进入树的世界吧&#xff01;&#…

Flutter 环境配置

Flutter 环境配置 电脑上面安装配置JDK 1.下载安装JDK 下载地址&#xff1a;https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) 2.配置JDK 2.1、系统变量 里面新增JAVA_HOME&#xff0c;设置值为java sdk 根目录&#xff1a; 2.2 …

OpenGl之纹理坐标及纹理映射

文章目录 纹理坐标纹理映射代码 纹理坐标 为了实现纹理贴图我们需要做三件事&#xff1a;将一张贴图加载到OpenGL中&#xff0c;提供纹理坐标和顶点&#xff08;将纹理对应匹配到顶点上&#xff09;&#xff0c;并使用纹理坐标从纹理中进行取样操作取得像素颜色。由于三角形会被…

Vue源码解析--更新中

【尚硅谷】Vue源码解析之虚拟DOM和diff算法 【Vue源码】图解 diff算法 与 虚拟DOM-snabbdom-最小量更新原理解析-手写源码-updateChildren] 文章目录 2. snabbdom 简介 及 准备工作2.1 简介2.2 搭建初始环境1. 安装snabbdom2. 安装webpack5并配置3. 复制官方demo Example 3. …

如何把歌曲里的伴奏音乐提取出来,分享几个方法给大家!

对于一首歌&#xff0c;我们都知道&#xff0c;它有两部分组成&#xff1a;背景音乐人声。这两者合在一起&#xff0c;便是我们经常听的歌。部分用户想要直接获取歌曲伴奏&#xff0c;那么可以在UU伴奏网上下载。 操作方法比较简单&#xff0c;直接搜索想要的歌曲名称就可以了…