漏看了題意了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;
}
沒有留言:
張貼留言