中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

算法15. 三數之和_(c語言版)

發布時間:2020-08-04 17:31:23 來源:ITPUB博客 閱讀:377 作者:orastar 欄目:編程語言

1. 題目描述

給你一個包含 n 個整數的數組 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?請你找出所有滿足條件且不重復的三元組。
注意:答案中不可以包含重復的三元組。
示例:
給定數組 nums = [-1, 0, 1, 2, -1, -4],
滿足要求的三元組集合為:
[
  [-1, 0, 1],
  [-1, -1, 2]
]

2. 測試結果

算法15. 三數之和_(c語言版)

3. 解法1_雙指針法

/*
author: xidoublestar
date: 2020-5-21
*/
int compare(const void* a, const void* b)
{
    return (*(int*)a - *(int*)b);
}
int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes) {
    //排除平臺只輸出]的bug
    *returnSize = 0;
    //排除輸入小于3的情況
    if (numsSize < 3)
        return NULL;
    //使用qsort函數快速排序
    qsort(nums, numsSize, sizeof(int), compare);
    //申請二級指針空間
    int** returnArray = (int**)malloc(sizeof(int*) * (numsSize - 2) * (numsSize - 2));
    //申請每個一維數組大小的空間
    *returnColumnSizes = (int*)malloc(sizeof(int) * (numsSize - 2) * (numsSize - 2));
    int cur = 0, low = 0,high = 0;
    //cur遍歷數組,low和high分別做為左值和右值的下標往中間夾
    while (nums[cur] <= 0 && cur < numsSize - 2) {
        low = cur + 1;
        high = numsSize - 1;
        while (low < high) {
            if (0 == (nums[cur] + nums[low] + nums[high])) {
                returnArray[*returnSize] = (int*)malloc(sizeof(int) * 3);//每找到一組,二級指針分配3個空間
                (*returnColumnSizes)[*returnSize] = 3;//記錄列數
                returnArray[*returnSize][0] = nums[cur];
                returnArray[*returnSize][1] = nums[low];
                returnArray[(*returnSize)++][2] = nums[high];
                while ((nums[low] == nums[++low]) && (low < high));//往后去重
                while ((nums[high] == nums[--high]) && (low < high));//往前去重
            }
            else if (0 < (nums[cur] + nums[low] + nums[high])) {
                high--;
            }
            else {
                low++;
            }
        }
        while ((nums[cur] == nums[++cur]) && (cur < numsSize - 2));//cur左值去重
    }
    return returnArray;
}

4、復雜度分析

時間復雜度:O(n*n)
空間復雜度:O(1)

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泸水县| 赣榆县| 江陵县| 吐鲁番市| 神农架林区| 改则县| 班玛县| 乐山市| 烟台市| 商洛市| 全南县| 玉屏| 县级市| 汤阴县| 荥经县| 曲沃县| 淮南市| 乐昌市| 永德县| 河西区| 鄂伦春自治旗| 长子县| 肇东市| 万载县| 江孜县| 广宗县| 教育| 巴林左旗| 临江市| 盘锦市| 山阴县| 牟定县| 兴山县| 和林格尔县| 太和县| 海门市| 昂仁县| 林甸县| 阜新| 慈溪市| 堆龙德庆县|