我用c語言練習,這里是練習:
給定一個整數陣列 nums 和一個整數目標,回傳兩個數字的索引,使它們加起來等于目標。您可以假設每個輸入都只有一個解決方案,并且您不能兩次使用相同的元素。您可以按任何順序回傳答案。
例子 :
Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Output: Because nums[0] nums[1] == 9, we return [0, 1].
這是我的嘗試:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
static int r[2];
for(int i=0;i<numsSize;i ){
for(int j=0;j<numsSize;j ){
if(i!=j&&(nums[i] nums[j])==target){
r[0]=i;
r[1]=j;
}
}
}
return r;
}
但是收到錯誤的答案:
在此處輸入圖片說明
uj5u.com熱心網友回復:
函式定義不滿足注釋中指定的要求
- 注意:回傳的陣列必須是 malloced,假設呼叫者呼叫 free()
此外引數
int* returnSize
不在您的函式定義中使用。
似乎該功能應按以下方式定義,如下面的演示程式所示。我假設源陣列中的任何元素只能出現在結果陣列中一次。
#include <stdio.h>
#include <stdlib.h>
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int *twoSum( int *nums, int numsSize, int target, int *returnSize )
{
int *result = NULL;
*returnSize = 0;
for (int i = 0; i < numsSize; i )
{
for (int j = i 1; j < numsSize; j )
{
if (nums[i] nums[j] == target)
{
int unique = result == NULL;
if (!unique)
{
unique = 1;
for (int k = 1; unique && k < *returnSize; k = 2)
{
unique = nums[k] != nums[j];
}
}
if (unique)
{
int *tmp = realloc( result, ( *returnSize 2 ) * sizeof( int ) );
if (tmp != NULL)
{
result = tmp;
result[*returnSize] = i;
result[*returnSize 1] = j;
*returnSize = 2;
}
}
}
}
}
return result;
}
int main( void )
{
int a[] = { 2, 7, 11, 15 };
int target = 9;
int resultSize;
int *result = twoSum( a, sizeof( a ) / sizeof( *a ), target, &resultSize );
if (result)
{
for (int i = 0; i < resultSize; i = 2 )
{
printf( "%d, %d ", result[i], result[i 1] );
}
putchar( '\n' );
}
free( result );
}
程式輸出為
0, 1
雖然對于我來說,我會像這樣宣告函式
int *twoSum( const int *nums, size_t numsSize, int target, size_t *returnSize );
uj5u.com熱心網友回復:
蠻力方法對于這個問題非常簡單。
int* twoSum(int* arr, int n, int t, int* returnSize){
int *res=malloc(2*sizeof(int));
*returnSize=2;
for(int i=0;i<n;i )
{
for(int j=i 1;j<n;j )
{
if((arr[i] arr[j])==t)
{
res[0]=i;
res[1]=j;
goto exit;
}
}
}
exit:
return res;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/405001.html
標籤:
