给定一个正整数数组,它的第 i 个元素是比特币第 i 天的价格。
如果你最多只允许完成一笔交易(即买入和卖出一次),设计一个算法来计算你所能获取的最大利润。
注意你不能在买入比特币前卖出。
import java.util.Scanner;
public class Main {
/**
* 运行时间:60ms
*
* 占用内存:10688k
* */
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] s = scanner.nextLine().split(" ");
int[] record = new int[s.length];
for (int i = 0; i < s.length; i++) {
record[i]=Integer.parseInt(s[i]);
}
int max=0;
for (int i = 0; i < s.length-1; i++) {
for (int j = i+1; j < s.length; j++) {
max=Math.max(max,record[j]-record[i]);
}
}
System.out.println(max);
}
}
解法二 import java.util.Scanner;
public class Main {
/**
* 运行时间:60ms
*
* 占用内存:10624k
* */
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int min = scanner.nextInt();
int profit=0;
while (scanner.hasNext()){
int i = scanner.nextInt();
profit=Math.max(profit,i-min);
min=Math.min(i,min);
}
System.out.println(profit);
}
} #include <iostream>
#include<set>
#include<map>
#include<vector>
#include<algorithm>
#include<math.h>
//#include<
using namespace std;
int main()
{
int min_price = -1;
int num,max_profit = 0;
while (cin>>num) {
if(min_price == -1)
min_price = num;
else {
if(min_price > num)
min_price = num;
else {
max_profit=max(num - min_price,max_profit);
}
}
}
cout<<max_profit<<endl;
return 0;
}
import java.util.Scanner;
import java.util.ArrayList;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
ArrayList<Integer> coin=new ArrayList<>();
while(in.hasNextInt()){
coin.add(in.nextInt());
}
Integer[] co=new Integer[coin.size()];
coin.toArray(co);
int profit=0;
for(int i=co.length-1;i>=0;i--)
for(int j=0;j<i;j++){
profit=Math.max((co[i]-co[j]),profit);
}
System.out.println(profit);
}
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] strPrice = br.readLine().trim().split(" ");
int[] price = new int[strPrice.length];
for(int i = 0; i < price.length; i++) price[i] = Integer.parseInt(strPrice[i]);
int maxIncome = 0;
for(int i = 0; i < price.length - 1; i++){
for(int j = i + 1; j < price.length; j++)
maxIncome = Math.max(maxIncome, price[j] - price[i]);
}
System.out.println(maxIncome);
}
} import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Solution2_比特币最佳买卖时机 {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String[] line1 = bf.readLine().split(" ");
int minprice = Integer.MAX_VALUE, max_profit = 0;
for (int i = 0; i < line1.length; i++) {
int a = Integer.parseInt(line1[i]);
if (minprice > a) {
minprice = a;
}else if (a - minprice > max_profit){
max_profit = a - minprice;
}
}
System.out.println(max_profit);
}
}
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String[] str = bf.readLine().split(" ");
int[] arr = new int[str.length];
for(int i = 0;i < str.length;i++){
arr[i] = Integer.parseInt(str[i]);
}
int maxprofit = 0;
for(int i = 0;i < arr.length;i++){
for(int j = i+1;j < arr.length;j++){
if(arr[i] >= arr[j]){
continue;
}else{
if((arr[j] - arr[i]) > maxprofit){
maxprofit = arr[j] - arr[i];
}
}
}
}
System.out.println(maxprofit);
}
}
暴力遍历它不香吗
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int buy = scanner.nextInt(), profit = 0;
while (scanner.hasNext()) {
// 输入新的价格
int price = scanner.nextInt();
// 每次输入新的价格时,更新最大利润
profit = Math.max(profit, price - buy);
// 每次输入新的价格时,更新最低买入价
buy = Math.min(buy, price);
}
System.out.println(profit);
}
}
import java.util.Scanner;
/*
* O(n)的做法
* 对于第i个位置上的元素,我们只需要知道区间[0, i - 1]最小值,就可以得出第二个数的位置为i的最大差值有序偶,枚举i就可以得出答案;而区间[0, i - 1]最小值可以预处理出来。
*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int min = scanner.nextInt(), max = 0;
int temp;
while (scanner.hasNext()) {
temp = scanner.nextInt();
max = Math.max(max, temp - min);
min = Math.min(min, temp);
}
System.out.println(max);
}
}
java版
import java.util.*;
import java.lang.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String in = sc.nextLine();
String[] s = in.split(" ");
int max = Integer.parseInt(s[0]);
int min = Integer.parseInt(s[0]);
int count = 0;
for (int i = 1; i < s.length; i++) {
int num = Integer.parseInt(s[i]);
if (num < min) {
min = num;
continue;
}
if (num > max) {
max = num;
if (max - min > count) {
count = max - min;
}
continue;
}
if (num - min > count) {
max = num;
count = num - min;
}
}
sc.close();
System.out.println(count);
}
} a=list(map(int, input().split())) max=0 for i in a: for j in a[a.index(i)+1:]: if max<j-i: max=j-i print(max)