每日一题(day4)

简介: 每日一题(day4)

前言

💫你好,我是辰chen,一个正在考研途中的sophomore dog😖

💫目前每日一题主要来自于 leetcode,当然也可能来自洛谷或其他刷题平台,每日一题专栏地址:每日一题

💫欢迎大家的关注,我的博客主要关注于考研408以及AIoT的内容


🌟 每日一题我会给出两种代码,C 版以及 Python版,刷题的目的是为了考研的算法题以及机试(或手写代码)

🌟这也是为什么不用C++ 而用 C ,Python版代码是为了提高语言熟练度(以后开发大概率用的是 Python

🌟 坚持打卡!踏踏实实走好每一步


以下的几个专栏是本人比较满意的专栏(大部分专栏仍在持续更新),欢迎大家的关注:

💥ACM-ICPC算法汇总【基础篇】

💥ACM-ICPC算法汇总【提高篇】

💥AIoT(人工智能+物联网)

💥考研

💥CSP认证考试历年题解


👊每日一句:一份耕耘,一份收获。

大家做完可以在评论区打卡留言✒️,形成良好的学习氛围,一起进步!

LeetCode 55. 跳跃游戏

题目描述:

给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标。

示例 1:

输入:nums = [2,3,1,1,4]
输出:true
解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。

示例 2:

输入:nums = [3,2,1,0,4]
输出:false
解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。

提示:

image.png

C版AC代码:

bool canJump(int* nums, int numsSize){
    int maxlen = 0;
    for (int i = 0; i < numsSize; i ++ ){
        if (i <= maxlen){
            maxlen = fmax(maxlen, i + nums[i]);
        }
        if (maxlen >= numsSize - 1){
            return true;
        }
    }
    return false;
}

Python版AC代码:

class Solution:
    def canJump(self, nums: List[int]) -> bool:
        n, maxlen = len(nums), 0
        for i in range (n):
            if (i <= maxlen):
                maxlen = max(maxlen, nums[i] + i)
            if maxlen >= n - 1:
                return True
        return False

LeetCode 45. 跳跃游戏 II

题目描述:

给你一个非负整数数组nums ,你最初位于数组的第一个位置。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

你的目标是使用最少的跳跃次数到达数组的最后一个位置。

假设你总是可以到达数组的最后一个位置。

示例 1:

输入: nums = [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。
     从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

示例 2:

输入: nums = [2,3,0,1,4]
输出: 2

image.png

C版AC代码:

int jump(int* nums, int numsSize){
    int step = 0, end = 0, maxlen = 0;
    for (int i = 0; i < numsSize - 1; i ++ ){
        maxlen = fmax(maxlen, nums[i] + i);
        if (i == end){
            step ++;
            end = maxlen;
        }
    }
    return step;
}

C版AC代码(特判):

int jump(int* nums, int numsSize){
    int step = 0, end = 0, maxlen = 0;
    for (int i = 0; i < numsSize; i ++ ){
        maxlen = fmax(maxlen, nums[i] + i);
        if (i == end && end != numsSize - 1){
            step ++;
            end = maxlen;
        }
    }
    return step;
}

Python版AC代码:

class Solution:
    def jump(self, nums: List[int]) -> int:
        maxlen, end, step = 0, 0, 0
        n = len(nums)
        for i in range(n - 1):
            maxlen = max(maxlen, nums[i] + i)
            if i == end:
                step += 1
                end = maxlen
        return step





目录
相关文章
|
1月前
【LeetCode-每日一题】移动零
【LeetCode-每日一题】移动零
26 1
|
5月前
|
Python
每日一题 1447. 最简分数
每日一题 1447. 最简分数
LeetCode】每日一题(4)
LeetCode】每日一题(4)
42 0
【LeetCode】每日一题(3)
【LeetCode】每日一题(3)
63 0
|
6月前
每日一题——移动零
每日一题——移动零
|
11月前
|
算法 C语言 索引
每日一题:LeetCode-283. 移动零
每日一题:LeetCode-283. 移动零
【LeetCode】每日一题(5)
【LeetCode】每日一题(5)
51 0
|
算法
【LeetCode】每日一题(1)
【LeetCode】每日一题(1)
67 0
每日一题——后继者
每日一题——后继者
86 0
每日一题——后继者