【算法】基金明星经理-java

一、问题

你是一名基金明星经理,这天同事小坤向你请教“逢低吸纳”这一成功秘诀。“逢低吸纳”这一秘诀是每次你购买基金时的价格一定要比你上次购买的价格低,同事小坤照着这个秘诀每天观察基金的走势,看看他最多能买入几次(每天最多只买入一次,不一定是连续几天)。

二、要求

输入格式:
第1行为整数N,表示能购买基金的天数;第2行是N个正整数,为每一天基金的价格。

输出格式:
输出一个整数表示可购买基金的最多天数。

输入样例:
在这里给出一组输入。例如:
12
58 59 44 54 58 54 60 57 68 52 88 77

输出样例:
在这里给出相应的输出。例如:
4

三、代码

import java.util.ArrayList;
import java.util.Scanner;

public class Main{
    //比较函数
    public  static int getmax(int a,int b){
        return a>b?a:b;
    }
    //获取最长天数函数
    public  static int getDays(ArrayList<Integer> arrayList,int n){
        int dp[]=new int[99];//定义一个数组用来存每一个基金可以被选中的次数
        for(int i=0;i<n;i++){
            dp[i]=1;//每一个基金至少被选中一次 都先初始化为1
            for(int j=0;j<i;j++){
                if(arrayList.get(i)<arrayList.get(j))//如果 a<b 说明 a这个基金可以在b这个基金下选中 a被选中的次数是在b被选中的次数上+1
                    dp[i]=getmax(dp[i],dp[j]+1);
            }
        }
        //将dp从小到大排序整理
        for(int i=0;i<n;i++){
            for(int j=0;j<n-i;j++)
                if(dp[j]>dp[j+1]){
                    int t=dp[j];
                    dp[j]=dp[j+1];
                    dp[j+1]=t;
                }
        }
        return dp[n];//返回最大值
    }

    public static void main(String[] args) {
        ArrayList<Integer> arr=new ArrayList();
        Scanner scanner=new Scanner(System.in);
        String ss=scanner.nextLine();
        int n=Integer.valueOf(ss);
        ss=scanner.nextLine();
        String temp[]=ss.split(" ");
        for (int i = 0; i < temp.length; i++) {
            arr.add(Integer.valueOf(temp[i]));
        }
        int a=getDays(arr,n);
        System.out.print(a);
    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值