求一個數組中, 連續幾個數的最大值,及其變種
阿新 • • 發佈:2019-02-10
import java.util.Arrays; import java.util.Scanner; public class KeShui { public static int max = 0; //網易瞌睡 public static void maxivalue(int [] arr, int k,int [] ks){ int length = arr.length; int tmp = k; int sum = 0; for (int i = 0; i < length; i++) { if(ks[i] == 1){ sum += arr[i]; } } for (int i = 0; i < length;i++){ //滑動視窗 if(ks[i] == 0){ sum += arr[i]; } if(i >= k - 1){ max = Math.max(max, sum); if(ks[i - (k - 1)] == 0) sum -= arr[i - (k - 1)]; } } } //求一個數組中 三個相連的數的最大值 public static int get(int [] arr,int k){//最多有三個數之和的最大值 相當於一個滑動視窗 int max = Integer.MIN_VALUE; int sum = 0; for (int i = 0; i < arr.length; i++) {// 1 2 3 4 3 k-1=2 sum += arr[i]; max = Math.max(max, sum); if(i >= k - 1) sum -= arr[i - (k - 1)]; } return max; } //除了他清醒外 最多清醒一次 並獲取最大收益 public static void main(String[] args) { Scanner sc = new Scanner(System.in); String [] str = sc.nextLine().trim().split(" "); int [] arr = new int[str.length]; for (int i = 0; i < arr.length; i++) { // 6 3 arr[i] = Integer.parseInt(str[i]); } String [] cstr = sc.nextLine().trim().split(" "); int [] carr = new int[cstr.length]; for (int i = 0; i < carr.length; i++) { //數值1 3 5 2 5 4 carr[i] = Integer.parseInt(cstr[i]); } String [] ccstr = sc.nextLine().trim().split(" "); int [] ccarr = new int[ccstr.length]; for (int i = 0; i < ccarr.length; i++) { //數值 1 1 0 1 0 0 ccarr[i] = Integer.parseInt(ccstr[i]); } maxivalue(carr,arr[1],ccarr); System.out.println(max); } // public static void main(String[] args) { // int arr[] = {1,2,3,4,3,1,1,1,2,2,2,33,3,3,55}; // System.out.println(get(arr, 3)); // } }