千锤百炼之每日算法(四)

题外话

想知道大家都喜欢博客写什么内容,大家可以在评论区留言!!

正题

 第一题

Fibonacci数列是这样定义的:
F[0] = 0
F[1] = 1
for each i ≥ 2: F[i] = F[i-1] + F[i-2]
因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, ...,在Fibonacci数列中的数我们称为Fibonacci数。给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N求最少需要多少步可以变为Fibonacci数。

输入一个数我们可以给这个数+1或者-1,让这个数变成斐波那契数中的一个,输出步数最少的变成斐波那契数

当我们输入15的时候,离15最近的斐波那契数为13和21,

15减去2等于13

15加上6等于21

所以最小步数为2

第一题思路

我们只需要找到比输入的数大一点的斐波那契数和小一点的斐波那契数

然后用这两个数和输入的数进行比较差值大小即可

第一题代码详解

public int test11()
{
    Scanner scanner=new Scanner(System.in);
    //输入fib
    int fib= scanner.nextInt();


    //创建a,b,c
    int a=0;
    int b=1;
    int c=0;


    //创建min和max用来记录最近的大于和小于fib
    int min=0;
    int max=0;


    //如果fib=0或者1直接返回0即可
    if (fib==0||fib==1)
    {
        return 0;
    }
    //当a+b小于fib时
    while (a+b<fib)
    {
        //进行斐波那契循环
        c=a+b;
        a=b;
        b=c;
        //如果a+b大于fib的时候
        if (a+b>fib)
        {
            //此时的c就是最近的小于fib的数
            min=c;
            //此时的a+b就是最近的大于fib的数
            max=a+b;
        }
    }
    //最后只需要返回fib-min和max-fib中的最小值即可
    return Math.min((fib - min), (max - fib));
}

第二题

等差数列划分

如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。

例如,[1,3,5,7,9][7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。

给你一个整数数组 nums ,返回数组 nums 中所有为等差数组的 子数组 个数。

子数组 是数组中的一个连续序列。

第二题思路

我们要先确立dp状态表示,根据题目,我们可以设置dp[i]是以i位置为结尾的,等差数列的个数

dp[i]的动态转移方程

由上图我们找到了动态转移方程

由示例可知,nums数组长度至少大于等于3

所以当nums数组小于3时,直接返回0

第二题代码详解

 public int numberOfArithmeticSlices(int[] nums) {

        int n=nums.length;

//当数组长度小于3,直接返回0

        if(n<3)

        {

            return 0;

        }

//创建dp数组

        int[] dp=new int[n];

//初始化dp[0],dp[1]为0

        dp[0]=dp[1]=0;

//数组中至少有3个元素才有可能存在等差数列,所以下标从2开始

        for(int i=2;i<n;i++)

        {

            dp[i]=nums[i-1]-nums[i-2]==nums[i]-nums[i-1]?dp[i-1]+1:0;

                    }

//创建count负责计等差数列个数

        int count=0;

//将所有的等差数列个数加在一起,最后返回count即可

        for(int i=0;i<n;i++)

        {

            count+=dp[i];

        }

        return count;

    }

第三题

最长湍流子数组

给定一个整数数组 arr ,返回 arr 的 最大湍流子数组的长度 

如果比较符号在子数组中的每个相邻元素对之间翻转,则该子数组是 湍流子数组 。

更正式地来说,当 arr 的子数组 A[i], A[i+1], ..., A[j] 满足仅满足下列条件时,我们称其为湍流子数组

实例 4:

输入 :arr=[9,9]

输出: 1

第三题思路

我们先讨论一下有什么情况

1.以第i个元素结尾时最后一个符号是">"

2.以第i个元素结尾时最后一个符号是"<"

3.如果以第i个元素为结尾时,第i-1元素和第i个元素,两个数相等的话,湍流子数列长度为1

我们根据这三种情况,分别用g[i]表示以第i个元素结尾时最后一个符号是">"湍流子数组长度

f[i]表示以第i个元素结尾时最后一个符号是"<"

同时我们需要将f[i]和g[i]初始化为1,情况如下图

第三题代码

 public int maxTurbulenceSize(int[] arr) {

//设置数组f[]和数组g[],长度为n

    int n=arr.length;

    int[] f=new int[n];

    int[] g=new int[n];

   //设置count负责记录最大湍流数组长度,初始值为1

      int count=1;

//将两个数组初始值都设为1

   for(int i=0;i<n;i++)

   {

    f[i]=g[i]=1;

   }

//从i=1开始

    for(int i=1;i<n;i++)

    {

//判断以i元素结尾是的符号

        if(arr[i-1]<arr[i])

        {

//小于号,则让f[i]=g[i-1]+1

            f[i]=g[i-1]+1;

        }

        if(arr[i-1]>arr[i])

        {

//大于号,则让g[i]=f[i-1]+1

            g[i]=f[i-1]+1;

        }

最后记录下最长湍流子数组长度即可

        count=Math.max(count,Math.max(f[i],g[i]));

    }

    return count;

    }

小结

好长一段时间没写过博客了,最近很迷茫,快到秋招了,一起努力吧

喜欢的家人们记得给个三连(点赞关注收藏!!!) 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Webshell-jsp 冰蝎流量

考点:冰蝎jsp流量解密crc碰撞png暴力爆破宽高 主要是和 main.jsp进行通信浅浅看一下 yjg.txt内容 用jsp写的一些脚本 过滤http流量 可以判断是 冰蝎 的jsp webshell 尝试爆破常用密钥 无果 那么 密钥一定在流量中 看冰蝎动态生成密钥的最后一个返回包 就是明文的key 尝试多试…

高考填报志愿选专业,理科生如何选专业?

理科相对比较好选专业&#xff0c;因为院校多&#xff0c;专业多&#xff0c;当然招生名额也多&#xff0c;对于一般普通家庭的学生来说&#xff0c;理科生比文科生的就业前景好。但这是一个就业形势十分严峻的时代&#xff0c;没有谁敢绝对的说自己一定能在某个专业中学到知识…

【设计模式深度剖析】【7】【行为型】【观察者模式】

&#x1f448;️上一篇:中介者模式 设计模式-专栏&#x1f448;️ 文章目录 观察者模式英文原文直译如何理解&#xff1f; 观察者模式的角色类图代码示例 观察者模式的应用观察者模式的优点观察者模式的缺点观察者模式的使用场景 观察者模式 观察者模式&#xff08;Observer…

人工智能系统中毒是一个日益严重的威胁

咨询公司 Protiviti 最近与一家客户公司合作&#xff0c;该公司遭遇了一次不寻常的攻击&#xff1a;一名黑客试图操纵输入该公司人工智能系统的数据。 公司领导仍在调查此次攻击&#xff0c;公司怀疑黑客试图扭曲人工智能系统的输出。 此类攻击并非新鲜事&#xff0c;但在网络…

C语言详解(预编译)

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

【code-server】Code-Server 安装部署

Code-Server 安装部署 1.环境准备 可以参考 https://coder.com/docs/code-server/install code-server的安装流程进行安装&#xff0c;主机环境是 Centos7 建议使用 docker 方式进行安装&#xff0c;可能会出现如下报错&#xff0c;需要升级 GNC 的版本&#xff0c;由于影响交…

RabbitMQ配置与交换机学习

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

《吸血鬼猎人D》观后感

前言 在B站无意中发现了一部动漫电影《吸血鬼猎人D》&#xff0c;看着封面还不错&#xff0c;就试着点开了视频&#xff0c;看了一会儿&#xff0c;发现画面很精美&#xff0c;人物造型高大威猛&#xff0c;肌肉线条清晰可见。如果我没记错的话&#xff0c;这种风格在日本动漫中…

C语言复习总结(含代码例程)

数据类型 基本类型&#xff1a;字符型、整型、浮点型、双精度浮点型 构造类型&#xff1a;数组、指针、结构体、共用体和枚举 字符型&#xff1a; 类型表示&#xff1a; (signed) char char -- 有符号 char 型 unsigned char -- 无符号 char 型 类型大小&#xff…

平衡树之B树

平衡树 ├── AVL 树 ├── 红黑树 ├── 2-3 树 ├── B 树 ├── Splay 树 └── Treap没研究明白&#xff0c;算啦。不写了

Opus从入门到精通(一)简介

Opus从入门到精通(一):简介 Opus是什么? Opus编解码器是专门设计用于互联网的交互式语音和音频传输。它是由IETF的编解码器工作组设计的&#xff0c;合并了Skype的SILK和Xiph. Org的CELT技术。 Opus编解码器的设计目的是处理广泛的交互式音频应用程序,包括IP语音,视频,游戏…

列出docker常用的命令

一、基础命令 docker run 创建并启动一个容器 docker ps 列出当前运行的容器 docker ps -a 列出所有容器&#xff0c;包括未运行的 docker stop 停止一个运行中的容器 docker start 启动一个已停止的容器 docker restart 重启容器 docker rm 删除一个或多个容器 docker pull 从…

揭秘Netflix背后的魔法:如何用三层架构打造个性化推荐帝国

推荐系统就像一家餐厅的菜单推荐 想象一下&#xff0c;你走进一家餐厅&#xff0c;面对琳琅满目的菜单&#xff0c;不知道点什么好。这时候&#xff0c;服务员给你推荐了几道菜&#xff0c;这些推荐是基于你以往的口味偏好和其他顾客的选择。Netflix的推荐系统也是类似的&…

浅谈golang字符编码

1、 Golang 字符编码 Golang 的代码是由 Unicode 字符组成的&#xff0c;并由 Unicode 编码规范中的 UTF-8 编码格式进行编码并存储。 Unicode 是编码字符集&#xff0c;囊括了当今世界使用的全部语言和符号的字符。有三种编码形式&#xff1a;UTF-8&#xff0c;UTF-16&#…

【PL理论】(21) 函数式语言:支持匿名函数 fun x → E | 设计递归函数 | 支持递归函数:let rec ...

&#x1f4ad; 写在前面&#xff1a;本章我们将讲解支持匿名函数&#xff0c;先回顾一下 F# 语言表示函数的方法&#xff0c;然后引出它。随后我们讲解一下如何设计递归函数&#xff0c;最后让我们的 F- 语言支持递归函数。 目录 0x00 回顾&#xff1a;F# 语言 0x01 支持匿名…

iOS--oc对象,类,和元类本质

iOS--oc对象&#xff0c;类&#xff0c;和元类本质 前言实例对象的具体结构自定义类对象的结构继承关系 类信息的存放对isa、superclass总结 前言 最近在学习runtime的过程中&#xff0c;发现其中消息发送-动态方法解析-消息转发中涉及到了大量的类与对象的底层知识&#xff0…

[NCTF 2018]flask真香

打开题目后没有提示框&#xff0c;尝试扫描后也没有什么结果&#xff0c;猜想是ssti。所以尝试寻找ssti的注入点并判断模版。 模版判断方式&#xff1a; 在url地址中输入{7*7} 后发现不能识别执行。 尝试{{7*7}} ,执行成功&#xff0c;继续往下走注入{{7*7}}&#xff0c;如果执…

ubuntu certbot 生成https ssl证书

一、安装certbot应用 sudo apt update sudo apt install certbot python3-certbot-nginx二、生成证书 # 泛域名&#xff1a; certbot certonly -d *.你的主域名 --manual --preferred-challenges dns# 主域名&#xff1a; certbot certonly -d 你的主/子域名 --manual --pref…

java实战——图书管理项目

文章目录 项目所需要的技术栈项目演示项目准备工作环境准备数据库数据准备 前后端交互分析&#xff08;前端代码我们使用现成&#xff09;图书列表界面的创建查看前端发送的请求根据前端接收的返回值来编写model层根据请求编写controller层根据controller编写Service根据Servic…

代码随想录算法训练营第五十七 | 739. 每日温度、 496.下一个更大元素 I、503.下一个更大元素II

## 739. 每日温度 这里是引用 https://programmercarl.com/0739.%E6%AF%8F%E6%97%A5%E6%B8%A9%E5%BA%A6.html 第一次接触单调栈&#xff0c;看完视频讲解之后思路很清晰&#xff0c;对单调栈能够解决的问题类型有大致了解 class Solution { public:vector<int> dailyTemp…