[동적 기획] 최대 서브 시퀀스

1756 단어 데이터 구조
설명: 1. 주어진 서열 에서 연속 최대 하위 서열 을 찾 아 하위 서열 의 합 을 최대 값 으로 만족 시 키 고 이 최대 값 을 되 돌려 줍 니 다.
     2. 주어진 서열 에서 연속 최대 하위 서열 을 찾 아 하위 서열 의 적 을 최대 치 로 만족 시 키 고 이 최대 치 를 되 돌려 줍 니 다.
생각:
첫 번 째 문 제 는 먼저 변수 curMax 를 신청 하여 현재 하위 서열 의 누적 과 초기 화 를 0 으로 표시 합 니 다. res 는 현재 모든 하위 서열 과 최대 치 를 표시 하고 최소 값 INT 로 초기 화 합 니 다.MIN。시퀀스 에서 데이터 x 를 순서대로 읽 고 curMax > 0 이면 읽 은 데 이 터 를 현재 시퀀스 에 추가 합 니 다. curMax = curMax + x;만약 curMax < 0 이 라면 이전의 서열 을 버 리 고 현재 읽 은 데 이 터 를 다시 시작 하여 새로운 서열 의 누적 과 를 계산 합 니 다. 이때 curMax = x;매번 curMax 를 업데이트 할 때마다 curMax 와 res 의 크기 를 판단 해 야 합 니 다. curMax > res 가 있 으 면 res 를 curMax 로 업데이트 합 니 다.
두 번 째 문제 의 사고방식 은 비슷 하 다. 하나의 변 수 를 신청 하면 curMax 는 현재 하위 서열 의 누적 적 을 나타 내 고 1 로 초기 화 하 며 res 는 현재 모든 하위 서열 의 최대 치 를 나타 낸다.다른 것 은 새로운 하위 서열 이 현재 곱 하기 0 이 나 타 났 을 때 입 니 다. 또한 주의해 야 할 것 은 모든 하위 서열 의 곱 하기 를 확보 하기 위해 서 는 정렬 과 역순 이 두 번 주어진 서열 을 옮 겨 다 녀 야 합 니 다.
코드 는 다음 과 같 습 니 다:
첫 번 째 문제:
class Solution {
public:
    int maxSubArray(vector& nums) {
      int len=nums.size();
      int curMax=0,res=INT_MIN;
      for(int i=0;i0?(curMax+nums[i]):nums[i];
          if(curMax>res)
            res = curMax;
      }
      return res;
    }
};

두 번 째 문제:
class Solution {
public:
    int maxProduct(vector& nums) {
        int len=nums.size();
        long long curMax=1,res=INT_MIN;
        for(int i=0;ires) res = curMax;
            if(curMax==0) curMax=1;
        }
        curMax=1;
         for(int i=len-1;i>=0;i--){
            curMax=curMax*nums[i];
            if(curMax>res) res = curMax;
            if(curMax==0) curMax=1;
        }
        return res;
    }
};

좋은 웹페이지 즐겨찾기