LeetCode 1.Two Sum

由于找工作的需要开始刷LeetCode上面的题目,使用的是c语言。水平有限。以后每道题我会先写出我自己的方法,然后学习下大神的方法,并适当的记录下一些思路和想法。


/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* twoSum(int* nums, int numsSize, int target) {
    //sort nums
    int i, j, temp, tempin;
    int *result, *index;
    
    index = (int *)malloc(numsSize*sizeof(int));
    for (i = 0; i < numsSize; i++)
        index[i] = i;
        
	for (i = 1; i < numsSize; i++) {
	    j = i-1;
	    temp = nums[i];
	    tempin = index[i];
	    while (j >= 0 && nums[j] > temp) {
	        nums[j+1] = nums[j];
	        index[j+1] = index[j];
	        j--;
	    }
	    nums[j+1] = temp;
	    index[j+1] = tempin;
	}
	for (i = 0; i < numsSize; i++) {
	    printf("%d %d\n", nums[i], index[i]);
	}
	j = numsSize-1;
	for (i = 0; i < numsSize; i++)
	{
	    while (j > i && (nums[i] + nums[j]) > target) j--;
	    if (nums[i] + nums[j] == target)
	    {
            result = (int *)malloc(2*sizeof(int));
            if (index[i] < index[j]) {
                result[0] = index[i] + 1;
                result[1] = index[j] + 1;
            }
            
            else {
                result[0] = index[j] + 1;
                result[1] = index[i] + 1;
            }
            return result;
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值