[Algorithm][贪心][跳跃游戏][加油站][单调递增的数字][坏了的计算器]详细讲解

目录

  • 1.跳跃游戏
    • 1.题目链接
    • 2.算法思路详解
    • 3.代码实现
  • 2.加油站
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现
  • 3.单调递增的数字
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现
  • 4.坏了的计算器
    • 1.代码实现
    • 2.算法原理详解
    • 3.代码实现


1.跳跃游戏

1.题目链接

  • 跳跃游戏

2.算法思路详解

  • 贪心:类似层序遍历的过程
    请添加图片描述

3.代码实现

bool canJump(vector<int>& nums) 
{int left = 0, right = 0, maxPos = 0, n = nums.size();while(left <= right){if(maxPos >= n - 1){return true;}for(int i = left; i <= right; i++){maxPos = max(maxPos, nums[i] + i);}left = right + 1;right = maxPos;}return false;
}

2.加油站

1.题目链接

  • 加油站

2.算法原理详解

  • 思路一:暴力解 —> 枚举 —> 会超时:P
    • 依次枚举所有的起点
    • 从起点开始,模拟一遍加油的流程即可
  • 思路二:优化暴力解法 —> 找规律(贪心)
    请添加图片描述

3.代码实现

// v1.0 暴力解
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) 
{int n = gas.size();for(int i = 0; i < n; i++) // 枚举起点{int rest = 0;for(int step = 0; step < n; step++) // 枚举向后走的步数{int index = (i + step) % n; // 求出走step步之后的下标rest = rest + gas[index] - cost[index];if(rest < 0){break;}}if(rest >= 0){return i;}}return -1;
}
--------------------------------------------------------------------
// v2.0 贪心
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) 
{int n = gas.size();for(int i = 0; i < n; i++) // 枚举起点{int rest = 0, step = 0;for(; step < n; step++) // 枚举向后走的步数{int index = (i + step) % n; // 求出走step步之后的下标rest = rest + gas[index] - cost[index];if(rest < 0){break;}}if(rest >= 0){return i;}i = i + step; // 优化}return -1;
}

3.单调递增的数字

1.题目链接

  • 单调递增的数字

2.算法原理详解

  • 思路一:暴力枚举
    • 从大到小的顺序,枚举[n, 0]区间内的数字
    • 判断数字是否是“单调递增的”
  • 思路二:贪心
    • 如果高位单调递增,就不去修改
      • 因为高位如果修改了,那么该数大小会小非常多,影响较大
    • 从左往右,找到第一个递减的位置
      • 从这个位置向前推,推到相同区域的最左端
      • 使其减1,后面的数全部修改成9
        请添加图片描述

3.代码实现

int monotoneIncreasingDigits(int n) 
{string str = to_string(n); // 把数字转化为字符串,以便逐位操作int i = 0, m = str.size();// 找到第一个递减的位置while(i + 1 < m && str[i] <= str[i + 1]){i++;}// 特判if(i == m - 1){return n;}// 回推while(i - 1 >= 0 && str[i] == str[i - 1]){i--;}// 操作str[i]--;for(int j = i + 1; j < m; j++){str[j] = '9';}return stoi(str);
}

4.坏了的计算器

1.代码实现

  • 坏了的计算器

2.算法原理详解

  • 思路一:正向推导,可用DFS解决
    请添加图片描述

  • 思路二:贪心 --> 正难则反

    • 从目标出发,执行/2+1操作
      请添加图片描述

3.代码实现

int brokenCalc(int startValue, int target) 
{int ret = 0;while(target > startValue){if(target % 2 == 0){target /= 2;}else{target += 1;}ret++;}return ret + startValue - target;
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记忆化搜索与状态压缩:优化递归与动态规划的利器

记忆化搜索是解决递归和动态规划问题的一种高效优化技术。它结合了递归的灵活性和动态规划的缓存思想&#xff0c;通过保存已经计算过的子问题结果&#xff0c;避免了重复计算&#xff0c;大幅提升了算法的效率。当问题状态复杂时&#xff0c;状态压缩技术可以进一步优化空间使…

Java数组05:Arrays类

本节内容视频链接&#xff1a;Java数组07&#xff1a;Arrays类讲解_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV12J41137hu?p57&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 Java中的‌Array类是一个针对数组进行操作的工具类&#xff0c;‌提供了排序、‌…

算法_字符串专题---持续更新

文章目录 前言最长公共前缀题目要求题目解析代码如下 最长回文子串题目要求题目解析代码如下 二进制求和题目要求题目解析 字符串相乘题目要求题目解析代码如下 前言 本文将会向你介绍有关字符串的相关题目&#xff1a;最长公共前缀、最长回文子串、二进制求和、字符串相乘。本…

GDB的基本使用(1)

我有话说 因为时间和精力原因&#xff0c;本文写的虎头蛇尾了&#xff0c;除了启动调试与程序执行以外只有少量截图演示&#xff0c;只是简单的说明。如果有需要可以联系我&#xff0c;我有时间的话会把演示补上&#xff0c;谢谢理解。 启动调试与程序执行 启动调试并传递参数…

linux环境下通过源码编译的方式安装mysql8.0.16版本

文章目录 前言一、资源准备1.源码下载2.依赖命令安装2.1 安装依赖包2.2 安装高版本gcc2.3 安装高版本cmake 二、编译安装mysql1.解压mysql-boost-8.0.16安装包2.执行编译命令3.执行make命令4.执行make install 命令5.编译安装完成后结果检查 三、初始化mysql1. 创建数据相关目录…

在ubuntu16.04下使用词典工具GoldenDict

前言 本来要装有道词典&#xff0c;结果发现各种问题&#xff0c;放弃。 网上看大家对GoldenDict评价比较高&#xff0c;决定安装GoldenDict 。 安装 启动 添加词库 GoldenDict本身并不带词库&#xff0c;需要查词的话&#xff0c;必须先下载离线词库或者配置在线翻译网址才…

SQL每日一练-0816

今日SQL题&#xff1a;计算每个项目的年度收入增长率 难度系数&#xff1a;&#x1f31f;☆☆☆☆☆☆☆☆☆ 1、题目要求 计算每个项目每年的收入总额&#xff0c;并计算项目收入环比增长率。找出每年收入增长率最高的项目。输出结果显示年份、项目ID、项目名称、项…

OD C卷 - 查找一个有向网络的头节点和尾节点

查找一个有向网络的头节点和尾节点 &#xff08;200&#xff09; 在一个有向图中&#xff0c;有向边用两个整数表示&#xff0c;第一个整数表示起始节点&#xff0c;第二个整数表示终止节点&#xff1b;图中只有一个头节点&#xff0c;一个或者多个尾节点&#xff1b;图可能存…

RTX 40全系10款显卡《黑神化:悟空》测试:打开DLSS3帧生成 性能直翻4倍

一、前言&#xff1a;《黑神话&#xff1a;悟空》临近发布 RTX 40系显卡表现如何&#xff1f; 2020年8月20日&#xff0c;游戏科学发布了《黑神话&#xff1a;悟空》的首个实机演示预告&#xff0c;惊艳了整个游戏行业&#xff01; 以往&#xff0c;很多人认为国产开发商做不出…

华为数通方向HCIP-DataCom H12-821题库(更新单选真题:1-10)

第1题 1、下面是一台路由器的部分配置,关于该配置描述正确的是? [HUAWEllact number 2001 [HUAWEl-acl-basic-2001]rule 0 permit source 1.1.1.1 0 [HUAWEl-acl-basic-2001]rule 1 deny source 1.1.1.0 0 [HUAWEl-acl-basic-2001]rule

Java实现STL中的全排列函数next_permutation()

目录 一、引言 二、全排列函数next_permutation() 三、next_permutation()的使用 四、Java实现next_permutation() 五、使用next_permutation()实现全排列 一、引言 相信很多小伙伴们都做过全排列的算法题&#xff0c;输入一个n&#xff0c;输出1~n的全排列。对于这个问题…

jemeter压力测试入门

1. 安装jemeter的压缩包并且解压 点击运行 2. 添加线程组 3. 线程组的参数设置 4. 添加http请求 5. 填写请求信息 添加监听器——结果树&#xff08;结果&#xff09;&#xff0c;聚合报告&#xff08;吞吐量报告&#xff09; 6. 通过cvs数据文件设置&#xff0c;配置元件&…

ARM 裸机与 Linux 驱动对比及 Linux 内核入门

目录 ARM裸机代码和驱动的区别 Linux系统组成 内核五大功能 设备驱动分类 内核类型 驱动模块 驱动模块示例 Makefile配置 命令 编码辅助工具 内核中的打印函数 printk 函数 修改打印级别 ​编辑 打印级别含义 驱动多文件编译 示例 模块传递参数 命令行传递参数…

jmeter简单发送接口

一、安装jmeter 拥有java环境&#xff0c;再下载jmeter 安装之后解压到本地&#xff0c;jmeter中的bin目录配置到环境变量中 之后可以通过cmd中 jmeter.bat命令运行 二、利用jmeter发送接口请求 1、添加线程组 添加->线程->线程组 2、添加http请求 添加->取样器-&g…

利用Matlab求解高阶微分方程(ode45)

1、高阶微分方程的基本概念 二阶以及二阶以上的微分方程称之为高阶微分方程&#xff0c;一般来说&#xff0c;微分方程的阶数越高&#xff0c;求解的难度也就越大。求高阶方程的一个常用方法就是降低阶数。对二阶方程 &#xff0c;如果能用变量代换把它化成一阶方程&#xff0c…

学习记录——day33 HTTP

目录 一、HTTP相关概念 二、客服端请求 1、请求首部 2、 响应首部 三、线程实现HTTP并发服务器 一、HTTP相关概念 1、HTTP&#xff0c;全称Hyper Text Transfer Protocol&#xff0c;用于万维网&#xff08;world wide web&#xff09;进行超文本学习的传输协议 2、HTTP属…

计算xpclr

1.conda安装xpclr 首先安装流程很轻松 conda create -n xpclr -c bioconda xpclr conda activate xpclr xpclr -h 2.按照要求准备文件 XPCLR - 简书 (jianshu.com) 根据教程准备文件&#xff0c;vcf&#xff0c;计算好的map&#xff0c;以及样本文件txt 其实官网也有介绍…

Docker基础概述、Docker安装、Docker镜像加速、Docker镜像指令

1.为什么学docker 开发环境与测试环境不同&#xff0c;导致错误 因此docker提供解决方法———系统平滑移植&#xff0c;容器虚拟化技术 将代码与软件与配置文件 打包成一个镜像 2.docker的历练 创建一个开发环境内成为镜像文件再用docker使用镜像 3.什么是docker Docke…

MySQL5.7数据库---入门教程(小白教程)

一、MySQL安装 本文以MySQL5.7安装为例。在设置完root密码和添加一个用户后&#xff0c;一路默认。 1、 2、通过点击红圈里的箭头选择对应的版本。 3、 4、端口&#xff08;Port&#xff09;一般默认不需要更改。 5、 二、配置环境变量 配置环境变量可以方便在win系统中cmd…

流媒体服务器二 3学习 librtmp 库的配置使用

librtmp 库是个啥&#xff1f; librtmp是一个开源的基于C语言的库&#xff0c;提供了一个连接RTMP服务器&#xff0c;发送和接收RTMP流的API。 它可以用来开发流媒体播放器&#xff0c;网络直播等应用。它的主要特点是快速、稳定和低延迟。 librtmp支持RTMP&#xff0c;RTMPS…