这个是题目,
这个是我不通过的测试用例:nums =
[368,369,307,304,384,138,90,279,35,396,114,328,251,364,300,191,438,467,183]
下面是我的代码:
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>int sumNumber(int num) { int digit;//用于保存每个位数的数字 int sum = 0;//用于记录每个位数的和 while (num != 0) { digit = num % 10; sum += digit; num /= 10; } return sum;}int maxNum(int* mid) { int i = 0, h = 0, max; int length = 0;//记录数组长度 length = sizeof(mid) / sizeof(mid[0]); printf("\n"); printf("length = %d\n", h); if (mid[0] == 0) max = -1; if (mid[0] !=0 && mid[1] == 0) max = mid[0]; /*if (mid[0] != 0 && mid[1] != 0) { max = mid[0]; for (i = 1; i < m; i++) { if (mid[i] > max) max = mid[i]; } } */ return max;}int maxNumber(int x, int y) { return x > y ? x : y;}int maximumSum(int* nums, int numsSize) { int i = 0, j = 0, h = 0, test = 0, max = 0; int hashTable[100000] = { 0 }; int find = 0; int* res = (int*)calloc(numsSize, sizeof(int)); for (i = 0; i < numsSize; i++) { res[i] = sumNumber(nums[i]); } for (i = 0; i < numsSize; i++) { printf("res[i] = %d ",res[i]); } printf("\n"); /*for (i = 0; i < numsSize; i++) { for (j = i + 1; j < numsSize; j++) { if (res[i] == res[j]) { test = nums[i] + nums[j]; if (test > max) max = test; } } }*/ for (i = 0; i < numsSize; i++) { if (hashTable[res[i]] == 0) hashTable[res[i]] = nums[i]; else { hashTable[res[i]] += nums[i]; max = maxNumber(max, hashTable[res[i]]); } } printf("hast18 = %d", hashTable[18]); //maxNum(hashTable); if (max == 0) return -1; return max;}int main() { int find = 0; int nums[19] = { 368,369,307,304,384,138,90,279,35,396,114,328,251,364,300,191,438,467,183 }; find = maximumSum(nums, 19); printf(" find = %d ", find);}
我运行上面的测试用例后,得到的结果是1044,我感觉没错啊,上面数组中的369,279,396的数位和是18,他们相加的结果是1044,而正确答案是835,即368,438的加和为835。
但是我这样写代码就行,最后运行的结果就是835,求大佬解答。
int sumNumber(int num) { int digit;//用于保存每个位数的数字 int sum = 0;//用于记录每个位数的和 while (num != 0) { digit = num % 10; sum += digit; num /= 10; } return sum;}int maximumSum(int* nums, int numsSize) { int i = 0, j = 0, h = 0, test = 0, max = 0; int* res = (int*)calloc(numsSize, sizeof(int)); for (i = 0; i < numsSize; i++) { res[i] = sumNumber(nums[i]); } for (i = 0; i < numsSize; i++) { printf("res[i] = %d ", res[i]); } printf("\n"); for (i = 0; i < numsSize; i++) { for (j = i + 1; j < numsSize; j++) { if (res[i] == res[j]) { test = nums[i] + nums[j]; printf("test : %d,res[i] = %d\n",test,res[i]); if (test > max) max = test; } } } if (max == 0) return -1; return max;}
题目要求选出两个下标求和,问和的最大值。你那个是三个,不是两个。
问题内容: 我所有的React项目的文件大小通常都非常大(bundle.js为4.87 mb,vendor.bundle.js为2.87 mb)。我不知道为什么这么大。我已经启用了uglifyJS,但这似乎并没有太大帮助(5.09> 4.87mb和2.9> 2.87mb) 我的package.json 有谁知道如何解决这个问题? 问题答案: 编辑 我不确定您是在Mac / IO还是Windows上
给你一个整数列表,长度为偶数。考虑这样一个操作,您在nums中选择任意数字,并用[1,max(nums)]之间的值更新它。返回所需的操作数,使得对于每个i,nums[i]+nums[n-1-i]等于相同的数。问题可以贪婪地解决。 注意:n是数组的大小,max(nums)是nums中的最大元素。 null 设i=0,nums[0]+nums[6-1-0]=4。 i=1,nums[1]+nums[6-
问题内容: SSCCE: 以上输出: 问题答案: 异常类继承自其方法,并且不会覆盖它。每次都创建新的Exception实例,它们是内存中的不同对象。即使它们的堆栈跟踪相同,但它们在内存中的对象分配仍然不同,并且使用默认的equals()方法,它们并不相同。 但是,您可以定义自定义异常类并重写。
问题内容: 似乎以下代码应返回true,但返回false。 这有什么意义? 问题答案: 常规()和严格()相等之间的唯一区别是,严格相等运算符禁用类型转换。由于已经在比较两个相同类型的变量,因此使用的相等运算符的类型无关紧要。 不管您使用常规相等还是严格相等,对象比较仅 在您比较相同的精确对象时得出 。 也就是说,给定,,,但。 两个不同的对象(即使它们都具有零或相同的精确属性)也永远不会相等地进
问题内容: 您可能知道,这两种类型都是32位。只能容纳整数,而还支持浮点数(如类型名称所示)。 那么怎么可能最大的值为2 31,最大的值为 3.4 * 10 38,而它们都是32位? 我认为的最大容量应大于浮点数,因为它不会为浮点数节省内存,并且仅接受整数。在这种情况下,我很高兴为您提供解释。 问题答案: 您的直觉很正确地告诉您,一个 信息内容 中的 信息内容 不能超过另一个,因为它们都有32位。
我在一次采访中被问到这个问题。给定一个整数数组(具有正值和负值),我们需要找到具有相等总和的不相交子数组的最大数量。 例子: 输入:[1,2,3]输出:2{因为我们最多有2个子数组,总和=3,即[1,2],[3]} 输入: [2 2 2 -2] 输出 : 2 {两个子数组,每个子数组的总和 = 2,即 [2],[2, 2, -2]} 我的方法 我想到的第一种方法是找到前缀和数组,然后以每个元素(前