首页 > 编程语言 >代码随想录算法训练营-回溯算法-2|55. 跳跃游戏、45. 跳跃游戏 II、1005. K 次取反后最大化的数组和

代码随想录算法训练营-回溯算法-2|55. 跳跃游戏、45. 跳跃游戏 II、1005. K 次取反后最大化的数组和

时间:2023-09-17 10:57:15浏览次数:37  
标签:distance 下标 游戏 覆盖 nums 算法 数组 跳跃

55. 跳跃游戏 1. 跳跃的覆盖范围。这个问题就转化为跳跃覆盖范围究竟可不可以覆盖到终点! 2. 贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点。

  • 时间复杂度: O(n)
  • 空间复杂度: O(1)
 1 class Solution:
 2     def canJump(self, nums: List[int]) -> bool:
 3         cover = 0
 4         if len(nums) == 1: return True
 5         i = 0
 6         # python不支持动态修改for循环中变量,使用while循环代替
 7         while i <= cover:
 8             cover = max(i + nums[i], cover)
 9             if cover >= len(nums) - 1: return True
10             i += 1
11         return False

45. 跳跃游戏 II

1. 目标是使用最少的跳跃次数到达数组的最后一个位置。 2. 说明: 假设你总是可以到达数组的最后一个位置。 3. 这里需要统计两个覆盖范围,当前这一步的最大覆盖和下一步最大覆盖。
  • 如果当前覆盖最远距离下标不是是集合终点,步数就加一,还需要继续走。
  • 如果当前覆盖最远距离下标就是是集合终点,步数不用加一,因为不能再往后走了。
  • 时间复杂度: O(n)
  • 空间复杂度: O(1)
 1 class Solution:
 2     def jump(self, nums):
 3         if len(nums) == 1:
 4             return 0
 5         
 6         cur_distance = 0  # 当前覆盖最远距离下标
 7         ans = 0  # 记录走的最大步数
 8         next_distance = 0  # 下一步覆盖最远距离下标
 9         
10         for i in range(len(nums)):
11             next_distance = max(nums[i] + i, next_distance)  # 更新下一步覆盖最远距离下标
12             if i == cur_distance:  # 遇到当前覆盖最远距离下标
13                 ans += 1  # 需要走下一步
14                 cur_distance = next_distance  # 更新当前覆盖最远距离下标(相当于加油了)
15                 if next_distance >= len(nums) - 1:  # 当前覆盖最远距离达到数组末尾,不用再做ans++操作,直接结束
16                     break
17         
18         return ans

 1005. K 次取反后最大化的数组和

1. 局部最优:让绝对值大的负数变为正数,当前数值达到最大,整体最优:整个数组和达到最大。

2. 那么本题的解题步骤为:

  • 第一步:将数组按照绝对值大小从大到小排序,注意要按照绝对值的大小
  • 第二步:从前向后遍历,遇到负数将其变为正数,同时K--
  • 第三步:如果K还大于0,那么反复转变数值最小的元素,将K用完
  • 第四步:求和
  
  • 时间复杂度: O(nlogn)
  • 空间复杂度: O(1)
 1 class Solution:
 2     def largestSumAfterKNegations(self, A: List[int], K: int) -> int:
 3         A.sort(key=lambda x: abs(x), reverse=True)  # 第一步:按照绝对值降序排序数组A
 4 
 5         for i in range(len(A)):  # 第二步:执行K次取反操作
 6             if A[i] < 0 and K > 0:
 7                 A[i] *= -1
 8                 K -= 1
 9 
10         if K % 2 == 1:  # 第三步:如果K还大于0,那么反复转变数值最小的元素,将K用完
11             A[-1] *= -1
12 
13         result = sum(A)  # 第四步:计算数组A的元素和
14         return result

 

标签:distance,下标,游戏,覆盖,nums,算法,数组,跳跃
From: https://www.cnblogs.com/wuyijia/p/17707873.html

相关文章

  • AI打游戏-伍(游戏,启动!)
    AI打游戏-伍(bilibili)目标使用代码调用yolo模型,并解析预测结果读取游戏视频预测结果,并可视化读取游戏窗口预测结果,并可视化根据预测结果,模拟操作鼠标操作步骤官方文档ultralytics官网predict代码预测静态图片读取游戏截图,送入yolo网络预测解析预测结果import......
  • IFAction导出的游戏如何在linux程序下运行?
    在linux系统里,应该都自带python环境,把游戏以web方式导出,在文件夹下创建一个python文件(文件后缀以.py结束),把以下代码复制进去,#author:rkey#date:20230904#note:用于解决IFAction导出的web版游戏在linux系统下运行的问题。importtkinterastkfromthreadingimportThrea......
  • 基于帧差法和形态学处理的行驶车辆跟踪算法matlab仿真
    1.算法理论概述       车辆跟踪是计算机视觉领域中的一个重要问题,它在交通监控、智能交通系统、自动驾驶等领域具有广泛的应用。本文介绍一种基于帧差法和形态学处理的车辆跟踪算法,通过对视频帧进行帧差法处理,检测出运动目标(车辆),然后利用形态学处理对目标进行形态学运算,......
  • 基于自适应运动补偿的双向运动估计算法matlab仿真
    1.算法运行效果图预览    2.算法运行软件版本matlab2022a  3.算法理论概述      基于自适应运动补偿的双向运动估计算法是一种用于视频或图像序列中运动估计的方法。它通过估计前向运动和反向运动场来提高运动估计的精度。该算法采用自适应运动补偿的策......
  • 动态路由的主流算法
    路由器就是一台网络设备,它有多张网卡。当一个入口的网络包送到路由器时,它会根据一个本地的转发信息库,来决定如何正确地转发流量。这个转发信息库通常被称为路由表。一张路由表中会有多条路由规则。每一条规则至少包含这三项信息。目的网络:这个包想去哪儿?出口设备:将包从哪个口扔出去......
  • python实现猜拳小游戏
    功能需求假设石头剪刀布分别由1,2,3代表,程序在石头剪刀布中随机生成一个结果,根据用户输入的结果判断用户的输赢。用户输赢和平局否需要打印出结果。石头赢剪刀剪刀赢布布赢石头功能分析1:定义猜拳的手势、名称和结果2:定义一个函数get_user_gesture()获取用户的手势信息,并且需要考虑......
  • 算法学习笔记(mkdir
    算法学习笔记数据结构图论树上问题欧拉序图上问题kruskal重构树数论数论分块......
  • 基础二分算法:整数二分、浮点二分
    1、整数二分以acwing789为例,题目要求如下:第一行输入整数n和q,表示数组长度和询问个数。第二行输入数组,包含n个整数。接下来q行,每一行一个整数k,表示一个问询元素。要求输出q行,每行包含两个整数,表示所求元素的起始位置和终止位置。如果数组中不存在该元素,则返回-1-1。#inc......
  • 算法刷题:DP专题(9.16,持续更)
    算法刷题系列上期:递归、栈/队列、树、回溯、DP(8.29)数组指针、前缀和/差分/树状数组、滑窗/单调队列/滚动哈希、二分(8.13)链表题(8.29)目录动态规划基础状态状态转移函数题目三角形最小路径和动态规划基础状态状态转移函数题目三角形最小路径和时间:3ms击败77%class......
  • 计算机视觉算法中的双眼视觉(Binocular Vision)
    引言双眼视觉是人类视觉系统中重要的特征之一,它使我们能够感知到三维空间中的深度和距离。在计算机视觉领域,双眼视觉被广泛应用于目标检测、立体视觉、人脸识别等任务中。本文将介绍双眼视觉的原理和在计算机视觉算法中的应用。双眼视觉原理双眼视觉是指人类使用两只眼睛同时观察同......