给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标。
给定nums=[2,7,11,15],target=9,
因为nums[0]nums[1]=27=9,所以返回[0,1]。
#include<stdio.h>
int* twoSum(int* nums, int numsSize, int target);
int main(){
int*array;
int arraySize;
scanf("%d",&arraySize);
for (int i=0;i<arraySize;i++){
scanf("%d",&array[i]);
}
int target;
scanf("%d",&target);
int* positions=twoSum(array, arraySize, target);
printf("The positions are: %p",positions);
return 0;
}
int* twoSum(int* nums, int numsSize, int target){
int *returnSize = NULL;
for(int i=0,sum=0;i<numsSize;i++){
for(int j=0;j<numsSize;j++){
sum =sum+nums[i]+nums[j];
if(sum==target){
returnSize[0]=nums[i];
returnSize[1]=nums[j];
}
else
returnSize[0]= -1;
returnSize[1]= -1;
}
}
return returnSize;
}
我收到的错误引用了代码中的一行空代码。请帮忙
这是您的代码:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int* twoSum(int* nums, int numsSize, int target);
void print_pos(int * arr, int i) {
printf("test %d\n", i);
if (arr != NULL) {
printf("position 1 = %d, position 2 = %d\n", arr[0], arr[1]);
} else
printf("Not found\n");
}
int main(){
int array[5] = {5, 6, 2 ,1 ,3} ;
int target1 = 11, target2 = 9, target3 = 15;
int * positions1=twoSum(array, 5, target1);
int * positions2=twoSum(array, 5, target2);
int * positions3=twoSum(array, 5, target3);
print_pos(positions1, 1);
print_pos(positions2, 2);
print_pos(positions3, 3);
return 0;
}
int* twoSum(int* nums, int numsSize, int target){
int *return_arr = malloc(sizeof(int) * 2);
bool found = false;
for(int i=0;i<numsSize;i++){
for(int j=0;j<numsSize;j++){
if((nums[i]+nums[j])==target){
return_arr[0]= i;
return_arr[1]= j;
found = true;
}
}
}
if (found)
return return_arr;
else {
free(return_arr);
return NULL;
}
}
您的代码中有一些错误:
您在int
上声明指针以存储要处理和结果的数据,但不分配内存:malloc
用于内存ALLOCation:
array = malloc(sizeof *array * arraySize);
和
int *returnSize = malloc(sizeof *returnSize * 2);
在twoSum
函数中,sum
变量越来越大:sum=sum nums[i]nums[j]
相反,一个简单的
if(target==nums[i]nums[j])
将执行您想要的测试。
在代码中,每次
sum
不等于target
,您都会将returnSize[0]
重置为-1
您不需要有一个
其他
子句:您可以在for
循环之前初始化返回大小
。
看看你的第一个代码:对于sum和target的任何值,
returnSize[1]
被设置为-1
,因为你忘记了在else
之后加上赞誉(但是,如前所述,你甚至不需要else
)
gcc
可以警告你这样的问题(-Wmisic-indent
,或者更好的-Wall
)
for(int j=0;j<numsSize;j++){
sum =sum+nums[i]+nums[j];
if(sum==target){
returnSize[0]=nums[i];
returnSize[1]=nums[j];
}
else
returnSize[0]= -1;
returnSize[1]= -1;
}
考虑到这一点,你可以编写一个代码来做你想做的事情。
要小心,还应该测试
scanf
和malloc
返回值。。。
#include <stdio.h>
#include <stdlib.h>
int *twoSum(int *nums, int numsSize, int target);
int main()
{
int *array;
int arraySize;
// TODO: test that scanf returned 1
scanf("%d", &arraySize);
// TODO: test that arraysize is at least 2
/* allocate array to store the numbers*/
array = malloc(sizeof *array * arraySize);
for (int i = 0; i < arraySize; i++) {
// TODO: test that scanf returned 1
scanf("%d", &array[i]);
}
int target;
// TODO: test that scanf returned 1
scanf("%d", &target);
int *positions = twoSum(array, arraySize, target);
printf("The positions are: %d(%d) %d(%d)\n", positions[0], array[positions[0]], positions[1], array[positions[1]]);
/* memory has been allocated? free it */
free(positions)
free(array)
return 0;
}
int *twoSum(int *nums, int numsSize, int target)
{
int *returnSize = malloc(sizeof *returnSize * 2);
returnSize[0] = returnSize[1] = -1;
for (int i = 0; i < numsSize; i++) {
for (int j = 0; j < numsSize; j++) {
if (target ==nums[i] + nums[j] ) {
returnSize[0] = i;
returnSize[1] = j;
return returnSize;
}
}
}
return returnSize;
}
这段代码有错误。首先,应该为int*数组分配内存
int-arraySize后的code>
作为输入,你可以这样做
数组=malloc(sizeof(int)*arraysize);
那么这里的
%p
不合适,请使用%d
。查看此处以了解有关%p
%p格式说明符的更多信息,而且由于要打印两个位置,您需要在printf
中调用两个参数,如下printf(“位置是:%d%d”,位置[0],位置[1])
在
twoSum
函数中,需要为int*returnSize分配内存
像这样
returnSize=malloc(sizeof(int)*2)
在这里,你不是在返回找到的元素的位置,而是在返回元素本身。
if(sum==target){
returnSize[0]=nums[i];
returnSize[1]=nums[j];
}
此外,您还需要在此
if语句中添加
return
,否则将完全遍历数组,returnSize
元素将再次成为-1
(除非答案是数组的最后一个元素)
所以这个
如果
应该是这样的:
if (sum == target) {
returnSize[0] = i;//num[i] is not position. it is element of array
returnSize[1] = j;//num[j] is not position .it is element of array
return returnSize;//otherwise it will traverse array compeltely and they -1 again
}
也只有当你为
if,else,while,for
(条件语句),可以避免使用大括号,否则,如果该条件变为真,则只会执行代码的一行,因此您必须为该
else
添加一个块:
else
{
returnSize[0] = -1;
returnSize[1] = -1;
}//coding more than one line so your else should be in a block
这里也是
sum=sum num[i]num[j]
错误,您应该将其更改为sum=num[i]num[j]
因为你只想检查两个当前数字的和,或者更好的方法根本不用和,只检查目标与
num[i]num[j]
以下是完整的代码:
int* twoSum(int* nums, int numsSize, int target);
int main() {
int* array;
int arraySize;
scanf("%d", &arraySize);
array = malloc(sizeof(int) * arraySize);//allocate memory for array
for (int i = 0; i < arraySize; i++) {
scanf("%d", &array[i]);
}
int target;
scanf("%d", &target);
int* positions = twoSum(array, arraySize, target);
printf("The positions are: %d %d", positions[0], positions[1]);//%p is for not for content of array
return 0;
}
int* twoSum(int* nums, int numsSize, int target) {
int* returnSize ;
returnSize = malloc(sizeof(int) * 2);
for (int i = 0; i < numsSize; i++) {
for (int j = 0; j < numsSize; j++) {
if (nums[i] + nums[j] == target) {
returnSize[0] = i;//num[i] is not position. it is element of array
returnSize[1] = j;//num[j] is not position .it is element of array
return returnSize;//otherwise it will traverse array compeltely and they -1 again
}
else
{
returnSize[0] = -1;
returnSize[1] = -1;
}//coding more than one line so your else should be in a block
}
}
return returnSize;
}
启动错误 ApplicationContext.若要显示条件报告,请在启用“调试”的情况下重新运行应用程序。2019-10-17 15:44:43.968错误10460--[main]O.S.Boot.SpringApplication:应用程序运行失败 我的pom.xml:
我正试图在Android Studio上调试我的项目——一个非常简单的东西——hello world。我得到这个信息: "安装未成功。应用程序无法安装:INSTALL_FAILED_MISSING_SHARED_LIBRARY apk列表:[0]'C:\Users\Pierr\AndroidStudioProjects\Hello\app\build\outputs\apk\debug\app d
我正在尝试“CountDiinctSlices”代码性问题。我尽力了,得分30%,所以试图查找这样做的人以获得洞察力。基本上,我在答案中没有得到的是初始化的数组(和)的使用以及它是如何被使用的,得到它的人可以友好地引导我完成这段代码。 这是我没有解释就找到的答案 这是全部问题 给出了一个整数M和一个由N个非负整数组成的非空数组a。数组A中的所有整数都小于或等于M。 一对整数(P,Q),使得0≤ P
正在启动Gradle守护进程...Gradle守护进程5 s 654 ms启动 失败:生成失败,出现异常。 > 其中:构建文件'c:\users\asus\androidstudioprojects\culturelwordsgame\app\Build.gradle'行:1 错误:评估项目':app'时出现问题。 未能应用插件[id'com.android.internal.version-ch
在调试模式下启动SM A105F上的lib\main.dart...正在运行分级任务“组装调试”...√build build\app\outputs\flutter-apk\app-debug.apk。正在安装build\app\outputs\flutter-apk\app.apk...错误:ADB退出,退出代码为1执行流式安装
本文向大家介绍解决Android 源码编译错误的问题,包括了解决Android 源码编译错误的问题的使用技巧和注意事项,需要的朋友参考一下 如下所示: Building with Jack: out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex FAILED: /bin/bash ou