经典题目刷一刷

贪多嚼不烂,

今天就两题啦~

目录

1.连续最大和

2.统计回文


1.连续最大和

连续最大和_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://www.nowcoder.com/practice/5a304c109a544aef9b583dce23f5f5db?tpId=85&&tqId=29858&rp=1&ru=/activity/oj&qru=/ta/2017test/question-ranking

①题目示例:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Y-N5YaF56CB6ICF,size_20,color_FFFFFF,t_70,g_se,x_16②方法解析一:(利用动态规划解决问题)

举个例子讲一下动态规划:

a.什么是状态方程式?

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Y-N5YaF56CB6ICF,size_20,color_FFFFFF,t_70,g_se,x_16b.结合代码进行讲解 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Y-N5YaF56CB6ICF,size_20,color_FFFFFF,t_70,g_se,x_16

 详细代码:

import java.util.*;
public class Main1{
    public static int getMax(int a,int b){
return a>b?a:b;
    }
    public static void main(String[]args){
        Scanner sc=new Scanner(System.in);
        //第一步输入的值即为数组的大小
        int  size=sc.nextInt();
        //再判断好数组的大小后,第二步依次输入数据,构建好这个数组
        int tmp[]=new int[size];
        for(int i=0;i<size;i++){
            tmp[i]=sc.nextInt();
        }
        //就利用动态规划思想来求解
        //记录下最开始的情况,后面若sum的值大于max,就把值赋给max,最终用max来记录
        int sum=tmp[0];
        int max=tmp[0];
        for(int i=1;i< tmp.length;i++){
            //①比较当前数据的值与当前数据之前所有和的值的大小,这里是一个状态方程
            sum=getMax(sum+tmp[i],tmp[i]);
            //所得到的较大值还需要与之前所确定的较大值进行比较筛选出更大的值
            if(sum>=max){
                max=sum;//因为是用max来存放最终的最大值
            }
        }
        System.out.println(max);
    }
}

 ③方法解析二:(仍然是利用动态规划解决问题)

此时利用的动态规划,和我们前面提及到的动态规划不大一样,这里的是指,随着i的移动,若i的前一位>0,这一位才加上前一位,否则不加,举个例子(这是在前面刷题的时候举的例子,再次使用)

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Y-N5YaF56CB6ICF,size_20,color_FFFFFF,t_70,g_se,x_16

 代码:

import java.util.*;
public class Main1{
    public static void main(String[]args){
        Scanner sc=new Scanner(System.in);
        int size = sc.nextInt();
        int[] array = new int[size];
        int Max=0;
        for(int i = 0; i< size;i++) {
            array[i] = sc.nextInt();
//因为在这里才输入,实质上相当于这里给Max赋予初始值
            Max=array[0];
        }
        for(int i=1;i<array.length;i++){
            if(array[i-1]>0){
                array[i]+=array[i-1];
            }//每次找出当前以来最大的数来进行进一步的比较
            Max=Math.max(Max,array[i]);
        }
        System.out.println(Max);
    }
}

2.统计回文

统计回文_牛客题霸_牛客网https://www.nowcoder.com/practice/9d1559511b3849deaa71b576fa7009dc?tpId=85&&tqId=29842&rp=1&ru=/activity/oj&qru=/ta/2017test/question-ranking

①题目示例:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Y-N5YaF56CB6ICF,size_20,color_FFFFFF,t_70,g_se,x_16

②方法解析:

按照题意 我们应该首先把字符串二插入字符串一中,但由于要插入多次,若是我们一直都在原字符串中进行删改,那么这是非常复杂的。因此,我们引入一个新的字符串,使得它引用字符串一,用此字符串来进行判断是否是回文结构。而要判断回文结构,这里有两种方式进行,方法一是直接进行逆置函数,通过string类型的equals方法,我们可以直接判断出两者是否一致,若是一致,则是回文,反之,则不是。方法二,外设一个函数来用双指针进行逆转,当判断是回文结构时,count➕➕,最后返回count的值即可。

代码:

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str1 = sc.nextLine();
String str2 = sc.nextLine();
int len = str1.length();
int n = 0;
for (int i = 0; i <= len; i++) {
//先创建一个新的StringBuffer对象,把str1的引用放入其中
// 将字符串2插入到字符串1的每个位置,再判断是否是回文
StringBuffer str = new StringBuffer(str1);
//下一行代码的意思是:在i位置,插入str2这个字符串
str.insert(i, str2);
//注意这里,不能直接StringBuilder str5 = str.reverse();
//因为这样str本身又变了。所以需要创建一个临时的变量字符串tmp
StringBuilder tmp = new StringBuilder(str);
StringBuilder str5 = tmp.reverse();
//逆置之后,我们可以根据equals方法来对是否是回文结构来进行判断。但是
//StringBuilder和StringBuilder是没有equals方法的,而String有,所以我们先把其转换为字符串,再进//一步进行转换
if (str.toString().equals(str5.toString())) {
//对回文结构进行计数
n++;
}
}
System.out.println(n);
}
}
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张洋洋~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值