int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
for (int i = 0; i
1. **函数参数**:
– `int* nums`:整数数组,包含待查找的数。
– `int numsSize`:数组的大小。
– `int target`:目标和。
– `int* returnSize`:用于返回结果数组的大小。
2. **双重循环**:
– `for (int i = 0; i – `for (int j = i + 1; j
3. **条件检查**:
– `if (nums[i] + nums[j] == target)`:检查当前两个数的和是否等于目标值。
4. **内存分配和结果存储**:
– `int* ret = malloc(sizeof(int) * 2);`:动态分配一个大小为 2 的整数数组,用于存储找到的两个索引。
– `ret[0] = i, ret[1] = j;`:将满足条件的索引存储在数组中。
5. **返回结果**:
– `*returnSize = 2;`:更新返回的大小为 2,表示找到了两个索引。
– `return ret;`:返回包含索引的数组。
6. **未找到情况**:
– 如果循环结束后没有找到符合条件的索引,则设置 `*returnSize = 0;` 并返回 `NULL`。
### 注意事项
– 在调用该函数后,记得使用 `free(ret)` 释放 `ret` 数组以防止内存泄漏。
– 此实现的时间复杂度为 O(n²),在较大数组时可能会效率较低。可以考虑使用哈希表优化到 O(n)。
class Solution {
public int[] twoSum(int[] nums, int target) {
Map hashtable = new HashMap();
for (int i = 0; i