TwoSum

Posted manual-linux

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TwoSum相关的知识,希望对你有一定的参考价值。

记录被LeetCode虐的日子
第一种方法:使用枚举

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* twoSum(int* nums, int numsSize, int target)
{
    int *result = (int*)malloc(2 * sizeof (int));  //申请内存
    int i = 0;
    int j = 0;
    if(sizeof(nums) < 1)  //输入参数有误判断
    {
        return NULL;
    }
    for(i = 0;i <= numsSize-1; i++)
    {
        for(j = 0;j <= numsSize-1;j++)
        {
            if((nums[i] + nums[j] == target) && (j != i) )
            {
                result[0] = i;
                result[1] = j;
                break;
            }
        }
    }
    return result;
}

注意:
1 代码开始,先检查边界值。如果为边界值,直接返回相应结果;如果是指针则检查是否为NULL.是数字的情况,要考虑特殊的数值,如零
2 提示错误:

load of null pointer of type ‘const int‘

在调用函数返回时,返回值如果是一个常量,则没问题。
返回值若为指针,则需注意会出现这个错误。如果返回的指针地址指向函数内的局部变量,在函数退出时,该变量的存储空间会被销毁,此时去访问该地址就会出现这个错误。
解决办法有以下三种:
1)返回的指针使用malloc分配空间
2)将该变量使用static修饰 static修饰的内部变量作用域不变 但是声明周期延长到程序结束 即该变量在函数退出后仍然存在
3)使用全局变量
建议使用malloc分配空间返回
3 指针数组初始化方法
指针数组中的每个元素都是一个指针,如下的array数组中的每个元素都是一个字符串指针,指向一个一维字符串数组。

char **array;
array = (char **)malloc(sizeof(char *) * 100) ; //array包含100个指针元素 为这100个指针变量分配空间
for(int i = 0; i < 100; i++)
array[i] = (char *)malloc(sizeof(char) * 50); // 为array中的每个指针变量进行初始化 上面的表达式只是为指针变量分配了空间 并没有为它们赋值 此语句为每个指针分配了长度为50个字符的空间 并将该空间的初始地址赋值给array中的指针











以上是关于TwoSum的主要内容,如果未能解决你的问题,请参考以下文章

TwoSum leetcode

TwoSum

1-TwoSum

LeetCode——TwoSum

LeetCode_1 TwoSum

leetCode:twoSum 两数之和 JAVA实现