LeetCode(66、136、724)

LeeCode66.加一

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:

输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。

解法一:注意[0]   [9]  [9,9]特殊输入。

class Solution {
    public int[] plusOne(int[] digits) {
        int num;      //定义一个int变量
        if(digits.length>1){//判断数组的长度
            for(int i=digits.length-1;i>=0;i--){//从数组中最后一个值开始
                num=(digits[i]+1)%10;           //余数
                if(num==0){                     //判断是否余数为0
                    digits[i]=0;                //余数为零直接令该角标对应值为0
                }
                else{
                    digits[i]=num;              //不为0则可以直接跳出判断
                    break;                      //跳出当前
                }
                if(digits[0]==0){               //如果角标第一个的值,为0
                    digits=new int[digits.length+1];//扩容1
                    digits[0]=1;                //第一个角标值为1
                }
            }
        }else{
            if(digits[0]==9){                   //判断长度为1的数组,第一个数字为9
                digits=new int[]{1,0};          //直接打印数组1,0
            }else{
                digits[0]++;                    //如果长度为1的数组,第一个数字不是9,则值+1
            }
        }
        return digits;                          //将digits返回
    }
}

 解法二:

class Solution {
    public int[] plusOne(int[] digits) {
        for(int i=digits.length-1;i>=0;i--){            //i取值为digits.length~0
            if(digits[i]!=9){                           //判断最后一个角标的数组值是否为9
                digits[i]++;                            //不是直接+1
                return digits;                          //将结果返回
            }
            digits[i]=0;                                //如果最后一个角标的数组值为9,则赋0
        }
        int[] newDigits=new int[digits.length+1];       //对原数组扩容1
        newDigits[0]=1;                                 //令第一个数为1
        return newDigits;                               //将结果返回
                
    }
}

LeeCode136.只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

输入: [2,2,1]
输出: 1
示例 2:

输入: [4,1,2,1,2]
输出: 4

解法:

class Solution {
    public int singleNumber(int[] nums) {
        int num=0;                 //定义num的初值为0
       for(int i=0;i<nums.length;i++){  //i从0~nums.length
           int count=1;                 //定义出现次数初值为1
           for(int j=0;j<nums.length;j++){//j从0~nums.length
               if(i!=j){                  //不能和本身比较
                   if(nums[i]==nums[j]){  //如果出现相同数字
                       count++;           //次数+1
                       break;             //跳出当前
                   }
               }
           }
           if(count==1){                  //如果没有出现数字,则次数还是1
               num=nums[i];               //将该值赋给num
           } 
       }
        return num;                       //将num返回输出
    }
}

LeeCode724.寻找数字的中心索引

如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。

示例 1:

输入: 
nums = [1, 7, 3, 6, 5, 6]
输出: 3
解释: 
索引3 (nums[3] = 6) 的左侧数之和(1 + 7 + 3 = 11),与右侧数之和(5 + 6 = 11)相等。
同时, 3 也是第一个符合要求的中心索引。
示例 2:

输入: 
nums = [1, 2, 3]
输出: -1
解释: 
数组中不存在满足此条件的中心索引。
说明:

nums 的长度范围为 [0, 10000]。
任何一个 nums[i] 将会是一个范围在 [-1000, 1000]的整数。

解法:

主要内容:本文详细介绍了一种QRBiLSTM(分位数回归双向长短期记忆网络)的时间序列区间预测方法。首先介绍了项目背景以及模型的优势,比如能够有效利用双向的信息,并对未来的趋势上限和下限做出估计。接着从数据生成出发讲述了具体的代码操作过程:数据预处理,搭建模型,进行训练,并最终可视化预测结果与计算分位数回归的边界线。提供的示例代码可以完全运行并且包含了数据生成环节,便于新手快速上手,深入学习。此外还指出了模型未来发展的方向,例如加入额外的输入特性和改善超参数配置等途径提高模型的表现。文中强调了时间序列的标准化和平稳检验,在样本划分阶段需要按时间序列顺序进行划分,并在训练阶段采取合适的手段预防过度拟合发生。 适合人群:对于希望学习和应用双向长短时记忆网络解决时序数据预测的初学者和具有一定基础的研究人员。尤其适用于有金融数据分析需求、需要做多一步或多步预测任务的从业者。 使用场景及目标:应用于金融市场波动预报、天气状况变化预测或是物流管理等多个领域内的决策支持。主要目的在于不仅能够提供精确的数值预计还能描绘出相应的区间概率图以增强结论置信程度。 补充说明:本教程通过一个由正弦信号加白噪构造而成的简单实例来指导大家理解和执行QRBiLSTM流程的所有关键步骤,这既方便于初学者跟踪学习,又有利于专业人士作为现有系统的补充参考工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值