Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

ย 

History

History
History
119 lines (94 loc) ยท 2.87 KB

File metadata and controls

119 lines (94 loc) ยท 2.87 KB
Copy raw file
Download raw file
Outline
Edit and raw actions

์—ฐ๊ด€ ๋งํฌ

Problem

๋ฌธ์ œ ์„ค๋ช…

์•„์ด๋””์–ด

  • ์–ด๋–ค ๋ฐฉ๋ฒ•์œผ๋กœ ์ ‘๊ทผํ–ˆ๋Š”์ง€ ์„œ์ˆ 
  • ํฌ์Šค vs ์ตœ์ ํ™” ์•„์ด๋””์–ด ์ฐจ์ด ๋“ฑ
  • ์žก๋„์— ๋Œ€ํ•œ ๊ณ ๋ ค

โœ… ์ฝ”๋“œ (Solution)

Brute force

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        vector<int> partialSum(nums.size()+1, 0);
        int res = nums[0];
        for(int i=0;i<nums.size();i++){
            partialSum[i+1] = partialSum[i]+nums[i];
        }

        for(int i=0;i<partialSum.size();i++){
            for(int j=0;j<i;j++){
                res = max(res, partialSum[i]-partialSum[j]);
            }
        }

        return res;
    }
};
  • Brute Force
  • o(n^2) -> TLE

Kadane Algorithm - pass

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int currentSum = nums[0];
        int maxSum = nums[0];
        
        for (int i = 1; i < nums.size(); ++i) {
            currentSum = max(nums[i], currentSum + nums[i]);
            maxSum = max(maxSum, currentSum);
        }
        
        return maxSum;
    }
};
  • O(n)
  • ๋‹ค์Œ ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์„ ๋•Œ ๋” ์ข‹์•„์ง€๋ฉด ์—ฐ์žฅ, ์•„๋‹ˆ๋ฉด ์ƒˆ๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ ๊ณ„์† ๊ฐฑ์‹ 

Divide and conquer - pass

class Solution {
public:
    int maxCrossingSum(vector<int>& nums, int left, int mid, int right) {
        int leftSum = INT_MIN, sum = 0;
        for (int i = mid; i >= left; i--) {
            sum += nums[i];
            leftSum = max(leftSum, sum);
        }

        int rightSum = INT_MIN;
        sum = 0;
        for (int i = mid + 1; i <= right; i++) {
            sum += nums[i];
            rightSum = max(rightSum, sum);
        }

        return leftSum + rightSum;
    }

    int maxSubArrayHelper(vector<int>& nums, int left, int right) {
        if (left == right)
            return nums[left];

        int mid = (left + right) / 2;

        int leftMax = maxSubArrayHelper(nums, left, mid);
        int rightMax = maxSubArrayHelper(nums, mid + 1, right);
        int crossMax = maxCrossingSum(nums, left, mid, right);

        return max({leftMax, rightMax, crossMax});
    }

    int maxSubArray(vector<int>& nums) {
        return maxSubArrayHelper(nums, 0, nums.size() - 1);
    }
};
  • O(n log n)
  • ์ฐธ๊ณ ์šฉ

์ตœ์ ํ™” ํฌ์ธํŠธ (Optimality Discussion)

โ€ข ์ตœ์ ํ™”ํ•œ ์ด์œ ์™€ ์›๋ฆฌ โ€ข ๋” ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ์—ฌ์ง€๋Š” ์žˆ๋Š”๊ฐ€? โ€ข ๊ธฐ์กด ๋ฐฉ๋ฒ• ๋Œ€๋น„ ์–ผ๋งˆ๋‚˜ ํšจ์œจ์ ์ด์—ˆ๋Š”์ง€

๐Ÿงช ํ…Œ์ŠคํŠธ & ์—ฃ์ง€ ์ผ€์ด์Šค

๐Ÿ“š ๊ด€๋ จ ์ง€์‹ ๋ณต์Šต

๐Ÿ” ํšŒ๊ณ 

Morty Proxy This is a proxified and sanitized view of the page, visit original site.