1 条题解

  • 0
    @ 2025-7-4 21:19:56

    JAVA题解:

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            
            int[] a = new int[n];
            for (int i = 0; i < n; i++) {
                a[i] = sc.nextInt();
            }
            
            System.out.println(maxSubarrayWithOneFlip(a));
            sc.close();
        }
        
        public static int maxSubarrayWithOneFlip(int[] a) {
            if (a.length == 0) return 0;
            
            int dp0 = a[0];     // 未取反
            int dp1 = -a[0];    // 正在取反
            int dp2 = a[0];     // 已取反
            int ans = Math.max(Math.max(dp0, dp1), dp2);
            
            for (int i = 1; i < a.length; i++) {
                int prev0 = dp0, prev1 = dp1, prev2 = dp2;
                
                dp0 = Math.max(prev0 + a[i], a[i]);
                dp1 = Math.max(prev1 - a[i], prev0 - a[i]);
                dp2 = Math.max(prev2 + a[i], prev1 + a[i]);
                
                ans = Math.max(ans, Math.max(Math.max(dp0, dp1), dp2));
            }
            
            return ans;
        }
    }
    
    
    
    • 1

    25年6月-华为实习-1.变换子数组最大和

    信息

    ID
    24
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    2
    已通过
    1
    上传者