zoukankan      html  css  js  c++  java
  • 53. Maximum Subarray【leetcode】

    53. Maximum Subarray【leetcode】

    Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

    For example, given the array [-2,1,-3,4,-1,2,1,-5,4],
    the contiguous subarray [4,-1,2,1] has the largest sum = 6.

    挑选子串中最大的值,自己写了一堆代码最后缺少负数情况的考虑,

    public class Solution {
        public int maxSubArray(int[] nums) {
            //第一次找一个数组 记录所有大于0的数字的位置
            //结果=第一个非负数
            //逐次循环加到下一个非负数,如果比当前结果大,则替换当前结果
            int resMax=nums[0];
            int res =nums[0] ;
            int len = nums.length;
            int vaNums[] = new int [len];
            int j=0;
           // Map<Integer,Integer> map =new HaspMap<Integer,Integer>();
            int m=0;
            int plusNums[] = new int [len];
            for(int i=0;i<len;i++){
                if(nums[i]>0){
                    vaNums[j]=i;
                   // map.put(i,nums[i]);
                    j++;
                }
                else{
                    plusNums[m]=i;
                     m++;
                }
                res+=nums[i];
            }
            if(j>0){
         
                for(int k=0;k<j;k++){
                    res =0;
                    for(int l =vaNums[k];l<=vaNums[j-1];l++){
                        res+=nums[l];
                        if(resMax<res){
                            resMax=res;
                        }
                    }
    
                }
            }//if j >0 end
            else {
                for(int k=0;k<m;k++){
                    res =nums[0];
                    for(int l =vaNums[k];l<plusNums[m-1];l++){
                        res+=nums[l];
                        if(resMax<res){
                            resMax=res;
                        }
                    }
    
                }
            }
                
            
            return resMax;
        }
    }

    最佳办法,感觉是真滴牛逼

    public class Solution {
        public int maxSubArray(int[] nums) {
            //第一次找一个数组 记录所有大于0的数字的位置
            //结果=第一个非负数
            //逐次循环加到下一个非负数,如果比当前结果大,则替换当前结果
            int sum=0,max=Integer.MIN_VALUE;
            int len =nums.length;
            for(int i=0;i<len;i++){
                sum +=nums[i];
                max =Math.max(sum,max);
                sum = Math.max(0,sum);
            }
    //方法二
    
          /*
            int sum=0,max=Integer.MIN_VALUE,minSum = 0;
            for (int i = 0; i < nums.length; i++) {
                sum += nums[i];
                max = Math.max(max, sum - minSum);
                minSum = Math.min(minSum, sum);
            }
        */
            
            return max;
        }
    }
    不积跬步无以至千里,千里之堤毁于蚁穴。 你是点滴积累成就你,你的丝丝懒惰毁掉你。 与诸君共勉
  • 相关阅读:
    Linux小知识磁盘简介(图)
    今天部署测试环境出现问题总结
    利用crt、xmanager 远程打开Linux图形界面
    weblogic92的AdminServe.lok Unable to obtain lock
    Linux中sqlplus退格显示“^H” 的解决
    设置fs的自动挂载
    java.net.BindException: Address already in use
    Linux下的WebLogic安装部署
    添加css样式的三种方法
    SQL Server 2000中 IDENTITY_INSERT的设置学习(转载自blacksource的专栏)
  • 原文地址:https://www.cnblogs.com/haoHaoStudyShare/p/7337952.html
Copyright © 2011-2022 走看看