首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

LeetCode Two Sum C 語言解法詳解:動態內存分配與雙重循環優化

     編輯:程式設計疑難解答

題目要求

返回動態分配的 int* 指向長度為 2 的數組,調用者負責 free。索引從 1 開始。

標準解法(雙重循環 O(n²))

int* twoSum(int* nums, int numsSize, int target) {
    for (int i = 0; i < numsSize; ++i) {
        for (int j = i + 1; j < numsSize; ++j) {
            if (nums[i] + nums[j] == target) {
                int *res = malloc(sizeof(int) * 2);
                res[0] = i + 1; // 1-based
                res[1] = j + 1;
                return res;
            }
        }
    }
    return NULL; // 題目保證有解
}

優化:哈希表 O(n)

C 標準庫無內建哈希表,可引入 uthash 或自寫簡單開放寻址表。面試中雙重循環通常可接受(numsSize ≤ 10⁴)。

內存管理提醒

  • 必須 malloc 分配返回數組,棧上數組函數返回後失效。
  • 測試代碼中調用 free(res) 避免洩漏。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved