2023年9月22日 星期五

[209] Minimum Size Subarray Sum

漏看了題意了XD subarray sum 需要找的是連續的subarray,
所以一開始想說就sort 開下去就好了是大錯特錯哈哈哈!!!

休息了幾天沒寫,果然寫出了一堆贅步Orz 我要再休息一下Orz
int minSubArrayLen(int target, int* nums, int numsSize){
int diff,left, right,currSum;
diff = left = right = currSum =0;
int min = INT_MAX;

while (right < numsSize)
{
if (currSum < target)
currSum += nums[right++];
else
{
diff = right-left;
if (diff < min)
min = diff;
currSum -= nums[left++];
}
//printf("%d %d %d \n", left,right,currSum);
}
if (currSum >= target)
{
while ((currSum >= target) && left < right)
currSum -= nums[left++];
}
else if (diff == 0)
{
return diff;
}

diff = right-left+1;
if (diff < min)
min = diff;

return min;
}

抄一抄之後長 這樣
int minSubArrayLen(int target, int* nums, int numsSize){
    int diff,left, right,currSum;
    diff = left = right = currSum =0;
    int min = INT_MAX;

    while (right < numsSize)
    {
        currSum += nums[right];
        while (currSum >= target)
        {
            diff = (right-left+1);
            if (diff < min)
                min = diff;
            currSum -= nums[left++];
        }
        right++;
    }
    
    return (min== INT_MAX)? 0 : min;
}

都寫了就存一下XD 如果是全部的任意加總而沒有規定一定要連續的話XD
int comp(const void *a, const void *b)
{
return (*(int*)b - *(int*)a);
}

int minSubArrayLen(int target, int* nums, int numsSize){
qsort (nums,numsSize,sizeof(int), comp );
int curr=0;
int count =0;
for (int i=0;i<numsSize;i++)
{
curr+=nums[i];
if (curr >= target)
{
return count+1;
}
count++;
}
return 0;
}

沒有留言:

張貼留言