有一个长为 n 的数组 A ,求满足 0 ≤ a ≤ b < n 的 A[b] - A[a] 的最大值。
给定数组 A 及它的大小 n ,请返回最大差值。
数据范围: ,数组中的值满足
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param A int整型一维数组 * @param n int整型 * @return int整型 */ public int getDis (int[] A, int n) { // write code here int max=Integer.MIN_VALUE; int min=Integer.MAX_VALUE; for(int i=0;i<n;i++){ min=Math.min(A[i],min); if(A[i]-min>max){ max=A[i]-min; } } return max; } }
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param A int整型一维数组 * @param n int整型 * @return int整型 */ public int getDis (int[] A, int n) { // write code here int min = A[0], max = 0; for (int i = 1; i < n; i++){ if (A[i] <= min){ min = A[i]; }else{ max = Math.max(max, A[i] - min); } } return max; } }
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param A int整型一维数组 * @param n int整型 * @return int整型 */ public int getDis(int[] A, int n) { // write code here int min = A[0]; int max = 0; for (int i = 1; i < n; i++) { max = Math.max(max, A[i] - min); min = Math.min(min, A[i]); } return max; } }
public int getDis (int[] A, int n) { // write code here int min = A[0]; // 前i个数中的最小值 // dp[i]:前i个数的最大差值 int[] dp = new int[n]; for(int i = 1; i < n; i++){ min = Math.min(A[i], min); // 获取前i个数的最大差值 dp[i] = Math.max(A[i] - min, dp[i - 1]); } return dp[n - 1]; }
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param A int整型一维数组 * @param n int整型 * @return int整型 */ //贪心 public int getDis (int[] A, int n) { // write code here int temp = A[0], max = 0; for(int i = 1; i < n; ++i) { if(temp - A[i] < 0) { max = Math.min(max, temp - A[i]); } else { temp = A[i]; } } return -max; } }
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param A int整型一维数组 * @param n int整型 * @return int整型 */ public int getDis (int[] A, int n) { // write code here int[] left = new int[n], right = new int[n]; left[0] = A[0]; right[n - 1] = A[n - 1]; for(int i = 1; i < n; i++){ left[i] = Math.min(left[i - 1], A[i]); right[n - 1 - i] = Math.max(A[n - 1 - i], right[n - i]); } int maxDiff = 0; for(int i = 0; i < n; i++){ maxDiff = Math.max(maxDiff, right[i] - left[i]); } return maxDiff; } }
import java.util.*; public class Solution { public int getDis (int[] A, int n) { int min = A[0]; int[] dp = new int[n]; dp[0] = A[0]; int res = 0; for(int i = 1; i < n; i++){ min = Math.min(min, A[i]); dp[i] = A[i] - min; res = Math.max(dp[i], res); } return res; } }