9.11小米第二题超时牛友们看看怎么优化
1.最大连续子序列之和
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { String str = sc.nextLine(); String[] s = str.split(" "); Set<Integer> set = new TreeSet<>(); for (int i = 0; i < s.length; i++) { int sum = 0; for (int j = i; j < s.length; j++) { sum += Integer.valueOf(s[j]); set.add(sum); } } Object[] num = set.toArray(); Arrays.sort(num); System.out.println(num[num.length-1]); } } }2.利润最大化
时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
米兔是一个投资人,持有着小米的股票。股票价格每日都有波动,数组price代表了每日股票的具体价格,其中price[i]代表小米在第i天的股价。米兔最多可以进行两次交易(一个买进,卖出为一次交易)并且不能同时进行两次交易(必须在再次购买前出售掉之前的股票),米兔想知道他最多能够获得多少利润呢?
输入
正整数序price,代表了股票价格。其中第i个数代表了第i天的价格。
输出
两次交易后能获得的最大利润
样例输入
2 1 5 0 2 3 1 4
样例输出
8
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { String str = sc.nextLine(); String[] s = str.split(" "); List list = new ArrayList(); for (int i = 0; i < s.length; i++) { for (int j = i; j < s.length-1; j++) { if(Integer.valueOf(s[i]) < Integer.valueOf(s[j+1])){ list.add(Math.abs(Integer.valueOf(s[i])-Integer.valueOf(s[j+1]))); } } } Object[] num = list.toArray(); Arrays.sort(num); String num1 = num[num.length-1].toString(); String num2 = num[num.length-2].toString(); int value = Integer.valueOf(num1) + Integer.valueOf(num2); System.out.println(value); } } }