일일 질문: Leetcode53 최대 하위 배열 합계

기사 디렉토리

시리즈: Greedy Algorithm 교육
언어: Java
주제 출처: Leetcode53 최대 하위 배열 합계
난이도: 중간
테스트 포인트: Greedy Algorithm Ideas and Understanding && Violent Algorithms


주제 설명

정수 배열 숫자가 주어지면 합계가 가장 큰 연속 하위 배열(하위 배열에는 하나 이상의 요소가 포함됨)을 찾고 가장 큰 합계를 반환하십시오. 하위 배열은 배열의 연속 부분입니다.

예 1: > 입력: nums = [-2,1,-3,4,-1,2,1,-5,4] 출력: 6 설명: [4,-1,2,1] 및 최대 6.

예 2: > 입력: nums = [1] 출력: 1**** 프롬프트: > 1 <= nums.length <= 10 5-10 4 <= nums[i] <= 10^4

1. 두 가지 사고 방식:

폭력적인 방법과 탐욕적인 알고리즘(dp를 사용할 수 있는 친구는 dp를 사용하여 해결하려고 시도할 수 있습니다. 여기에는 두 가지 아이디어만 있습니다) 폭력적인 방법 : 이 질문을 받으면 폭력을 사용할 수 있습니다. for 루프는 완벽하게 해결하지만 질문의 한계에 따라 시간 복잡도가 조건을 충족하지 못하고 시간이 초과될 것입니다. 분석은 다음과 같습니다: 질문의 한계 길이: 1 <= nums. length <= 10 5, 두 레이어의 for 루프 데이터는 10 8이 됩니다 . 그리디 알고리즘: 그리디 알고리즘에는 템플릿이 없으며 주요 테스트는 우리의 문제 해결 아이디어입니다 . 0보다 크면 연속 합계가 0보다 작을 때 간격 합계를 0보다 먼저 기록하고 i+1에서 다시 시작하여 간격 계산을 시작하고 마지막으로 여러 간격의 크기를 비교하여 가장 큰 값을 찾습니다. 간격 합, 예: 3 -5 3 1 -3 -1 i=0일 때 num =3, i=1일 때 num =-2 ; 이때 연속 합계가 0보다 작으면 결과를 사용하여 연속 합이 0이 되기 전의 구간합을 기록하고 이때는 3, 이때 헤드는 i=0,3에서 시작하여 이 구간을 종료하고 -5에서 헤드를 이동 다음 i=2에서 시작하여 재계산 숫자를 입력한 다음 가격을 결과와 비교합니다.

2. 참조 코드 폭력법:

class Solution {
    
     
暴力法:  
  public int maxSubArray(int[] nums) {
    
        
      int num =Integer.MIN_VALUE;     
         for(int i =0;i<nums.length;i++){
    
                
         int result =0;         
            int j =i;            
            while(j<nums.length){
    
               
                 result += nums[j];          
                       num=result>num?result:num;                j++;                }        }       
                        return num;    }}```
贪心算法
```java
class Solution {
    
    
//         贪心算法
//  如果连续和为负数了 那么记下此时的为0前的值 从下一个开始从新计数,通过比较下一个区间的和,然后判断    public int maxSubArray(int[] nums) {     
   int result = Integer.MIN_VALUE;     
      int num = 0;      
        for(int i =0;i<nums.length;i++){
    
              
          num += nums[i];         
             if(num>result){
    
                
                 result = num;            }         
                    if(num<0){
    
                    num =0;            }        }        return result;    }}```
以上分析,希望对您有所帮助,您的支持是我最大的动力,感谢一键三连!!

추천

출처blog.csdn.net/weixin_54174102/article/details/130049616