zoukankan      html  css  js  c++  java
  • 53.最大子序和

    题干

    给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

    示例:

    输入: [-2,1,-3,4,-1,2,1,-5,4]

    输出: 6

    解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

    进阶:

    如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。

    来源:力扣(LeetCode)

    链接:https://leetcode-cn.com/problems/maximum-subarray

    解题过程
    class Solution {
        public int maxSubArray(int[] nums) {
            int pre = 0, maxAns = nums[0];
            for (int x : nums) {
                pre = Math.max(pre + x, x);
                maxAns = Math.max(maxAns, pre);
            }
            return maxAns;
        }
    }

    主要思路为定义一个中间变量。从数组开头开始,累加相邻元素,同时与每个当前元素对比看谁大,如果当前元素更大则从当前重新开始累加,如果累加元素大则把当前元素累加进去。然后与不累加的之前记录的最大值对比,哪个大则记录那个为当前最大值。

    记录

    很多刷题的解题答案上写了这种for(int a:b)格式

    一开始没搞明白

    for(int a:b),b数组中定义一个a作为指示器,用来遍历b数组

    public class Test {
        public static int cal(int[] nums) {
            int sum=0;
            for(int x:nums){
                sum+=x;
            }
            return sum;
        }
        public static void main(String args[]){
            int[] nums={1,2,3,4,5};
            System.out.println(cal(nums));
        }
    }
    //返回15

    for(int a:b)

    后面数组b中的元素一一取出赋给 左边的变量a 然后执行循环体

    for (int i=0; i<b.length ;i++ ){
         for (int i=0; i<b.length ;i++ )
         {
            System.out.print(b[i] + " ");
         }
                 
         for (int a:b)
         {
            System.out.print(a + " ");
         }         
    }

    二者是一样的

  • 相关阅读:
    Java vs Python
    Compiled Language vs Scripting Language
    445. Add Two Numbers II
    213. House Robber II
    198. House Robber
    276. Paint Fence
    77. Combinations
    54. Spiral Matrix
    82. Remove Duplicates from Sorted List II
    80. Remove Duplicates from Sorted Array II
  • 原文地址:https://www.cnblogs.com/ak918xp/p/14185133.html
Copyright © 2011-2022 走看看