TOP101题解 | BM54#三数之和#

三数之和

https://www.nowcoder.com/practice/345e2ed5f81d4017bbb8cc6055b0b711

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * @author Senky
 * @date 2023.08.26
 * @par url https://www.nowcoder.com/creation/manager/content/584337070?type=column&status=-1
 * @brief 三重for循环可以解决但是太低效
 * @param num int整型一维数组 
 * @param numLen int num数组长度
 * @return int整型二维数组
 * @return int* returnSize 返回数组行数
 * @return int** returnColumnSizes 返回数组列数
 */
#include <stdlib.h>
int compar(const void* p1, const void* p2)
{
    return (*(int*)p1 - *(int*)p2);
}

int** threeSum(int* num, int numLen, int* returnSize, int** returnColumnSizes ) 
{
    // write code here
    qsort(num, numLen, sizeof(num[0]),  compar);
    int** result = (int**)malloc(sizeof(int*) * numLen * numLen);
    *returnSize = 0;
    *returnColumnSizes = (int*)malloc(sizeof(int) * numLen * numLen);

    for(int i = 0; i < numLen; i++)
    {
        if(i > 0 && num[i] == num[i - 1])
        {
            continue;
        }

        int target = -num[i];
        int left = i + 1;
        int right = numLen - 1;

        while (left < right) 
        {
            int sum = num[left] + num[right];
            if (sum == target) 
            {
                result[*returnSize] = (int*)malloc(sizeof(int) * 3);
                result[*returnSize][0] = num[i];
                result[*returnSize][1] = num[left];
                result[*returnSize][2] = num[right];
                (*returnColumnSizes)[*returnSize] = 3;
                (*returnSize)++;
                
                while (left < right && num[left] == num[left + 1]) 
                {
                    left++; // Skip duplicates
                }
                while (left < right && num[right] == num[right - 1]) 
                {
                    right--; // Skip duplicates
                }
                left++;
                right--;
            } 
            else if (sum < target) 
            {
                left++;
            } 
            else 
            {
                right--;
            }
        }
    }
    
    return result;
}

#TOP101#
TOP101-BM系列 文章被收录于专栏

系列的题解

全部评论

相关推荐

头像
不愿透露姓名的神秘牛友
06-06 21:28
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务