leetcode刷题(二)java

这篇博客主要介绍了使用Java解决LeetCode的两道题目:4. 求数组中连续和最大的子数组,通过动态规划求解;5. 数字翻译问题,利用动态规划计算不同翻译方法的数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4.求数组中连续和最大的子数组

首先将nums[0]初始化为初始答案,然后s作为动态最大值,不断更新,ans记录更新过程中的最大值,

由一正数出发,不断加到s,直到遇到一负数,在加上负数前,更新ans,加上负数后,如果大于0,不改变s,如果小于0,更新s为0(也即这一段不要)

class Solution {
    public int maxSubArray(int[] nums) {
        int s=0;
        int ans=0;
        for(int i=0;i<nums.length;i++)
        {
            if(nums[i]<0 && i==0)
            {
                ans=nums[i];
            }
            else if(nums[i]<0)
            {
                s=s+nums[i];
                if(s>ans)
                {
                    ans=s;
                }
                if(s<0)
                {
                    s=0;
                }
            }
            else
            {
                s=s+nums[i];
                if(s>ans)
                {
                    ans=s;
                }
            }
        }
        return ans;
    }
}

5.数字翻译

给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。

设立数组d,表示从给的数字的第一个数到第 i 个数有d[i]种翻译方法,则有:

如果nums[i]nums[i-1]有两种表示方法,则d[i]=d[i-1]+d[i-2]

否则只有 d[i]=d[i-1]种

一直更新,到最后输出d[nums.size-1]即可。

class Solution {
    int[] d=new int[40];
    public boolean check(String a)
    {
        int n=Integer.valueOf(a);
        if(n>=10&&n<=25)
        {
            return true;
        }
        return false;
    }
    public int translateNum(int num) {
        String s=String.valueOf(num);
        d[0]=1;
        d[1]=1;
        for(int i=1;i<s.length();i++)
        {
            if(i==1)
            {
                if(check(s.substring(0,2)))
                {
                    d[i]=2;
                }
                else
                {
                    d[i]=1;
                }
            }
            else if(check(s.substring(i-1,i+1)))
            {
                d[i]=d[i-1]+d[i-2];
            }
            else
            {
                d[i]=d[i-1];
            }
        }
        return d[s.length()-1];
    }
}

6.深度遍历二叉树,返回其最大深度

import java.math.*;
 class TreeNode {
     int val;
     TreeNode left;
     TreeNode right;
     TreeNode() {}
     TreeNode(int val) { this.val = val; }
     TreeNode(int val, TreeNode left, TreeNode right) {
         this.val = val;
         this.left = left;
         this.right = right;
     }
 }
public class questionEight {

    public static int maxDepth(TreeNode root) {
        if(root==null)
        {
            return 0;
        }
        else if(root.right==null && root.left==null)
        {
            return 1;
        }
        else
        {
            return Math.max(maxDepth(root.left),maxDepth(root.right))+1;
        }

    }
    public static void main(String[] args) {
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值