品牌宣传网站制作,宿州网站制作建设,手工制作灯笼简单又漂亮,北京网站建设服务二十一、数组中两元素最大乘积 给你一个整数数组 nums#xff0c;请你选择数组的两个不同下标 i 和 j#xff0c;使 (nums[i]-1)*(nums[j]-1) 取得最大值。 请你计算并返回该式的最大值。 示例 1#xff1a; 输入#xff1a;nums [3,4,5,2]
输出#xff1a;12
解释… 二十一、数组中两元素最大乘积 给你一个整数数组 nums请你选择数组的两个不同下标 i 和 j使 (nums[i]-1)*(nums[j]-1) 取得最大值。 请你计算并返回该式的最大值。 示例 1 输入nums [3,4,5,2]
输出12
解释如果选择下标 i1 和 j2下标从 0 开始则可以获得最大值(nums[1]-1)*(nums[2]-1) (4-1)*(5-1) 3*4 12 。 示例 2 输入nums [1,5,4,5]
输出16
解释选择下标 i1 和 j3下标从 0 开始则可以获得最大值 (5-1)*(5-1) 16 。示例 3 输入nums [3,7]
输出12 int cmp(const void *a,const void *b)
{return *(int *)a-*(int *)b;
}int maxProduct(int* nums, int numsSize){
qsort(nums,numsSize,sizeof(int),cmp);
return (nums[numsSize-1]-1)*(nums[numsSize-2]-1);
}
int maxProduct(int* nums, int numsSize) {int a nums[0], b nums[1]; // 使用数组的第一个和第二个元素初始化变量a和bif (a b) {int c a; // 临时变量用于存储a的值a b; // 将b的值赋给ab c; // 将c初始的a的值赋给b}for (int i 2; i numsSize; i) {if (nums[i] a) {b a; // 更新第二大的值b为之前的最大值aa nums[i]; // 更新最大值a为当前元素} else if (nums[i] b) {b nums[i]; // 更新第二大的值b为当前元素}}return (a - 1) * (b - 1); // 返回a - 1和b - 1的乘积
}二十二、 给你一个整数数组 nums 其中总是存在 唯一的 一个最大整数 。 请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是则返回 最大元素的下标 否则返回 -1 。 示例 1 输入nums [3,6,1,0]
输出1
解释6 是最大的整数对于数组中的其他整数6 至少是数组中其他元素的两倍。6 的下标是 1 所以返回 1 。示例 2 输入nums [1,2,3,4]
输出-1
解释4 没有超过 3 的两倍大所以返回 -1 。 示例 3 输入nums [1]
输出0
解释因为不存在其他数字所以认为现有数字 1 至少是其他数字的两倍。 int m1 -1, m2 -1; // 初始化最大值m1和次大值m2为-1
int index -1; // 初始化索引为-1
for (int i 0; i numsSize; i) {if (nums[i] m1) {m2 m1; // 更新次大值m2为之前的最大值m1m1 nums[i]; // 更新最大值m1为当前元素index i; // 更新索引为当前元素的索引}else if (nums[i] m2) {m2 nums[i]; // 更新次大值m2为当前元素}
}
return m1 m2 * 2 ? index : -1; // 如果最大值m1大于等于次大值m2的两倍则返回最大值的索引否则返回-1二十三、错误的集合 集合 s 包含从 1 到 n 的整数。不幸的是因为数据错误导致集合里面某一个数字复制了成了集合里面的另外一个数字的值导致集合 丢失了一个数字 并且 有一个数字重复 。 给定一个数组 nums 代表了集合 S 发生错误后的结果。 请你找出重复出现的整数再找到丢失的整数将它们以数组的形式返回。 示例 1 输入nums [1,2,2,4]
输出[2,3]示例 2 输入nums [1,1]
输出[1,2] int* a (int*)malloc(sizeof(int) * numsSize); // 动态分配大小为numsSize的整型数组a
for (int i 0; i numsSize; i) {a[i] 0; // 将数组a的所有元素初始化为0
}
for (int i 0; i numsSize; i) {a[nums[i] - 1]; // 统计每个数出现的频次并将频次记录在数组a中
}
int* res (int*)malloc(sizeof(int) * 2); // 动态分配大小为2的整型数组res
for (int i 0; i numsSize; i) {if (a[i] 2) {res[0] i 1; // 找到频次为2的数存储在res的第一个位置}if (a[i] 0) {res[1] i 1; // 找到频次为0的数存储在res的第二个位置}
}
*returnSize 2; // 设置返回结果数组的大小为2
return res; // 返回结果数组的地址二十四、将给定的字符串转化为整形 //将给定的字符串转化为整形
int exchange(char* ss)
{int result 0;while (*ss ! \0){if (*ss 0 *ss 9){result result * 10 (*ss-0);ss;}else{break;}}return result;
}int main() {const char* str 12345;int numexchange(str);printf(String: %s\n, str);printf(Integer: %d\n, num);return 0;
} 二十五、找出一个数字中有多少个1 int countSetBits(int num) {int count 0;while (num ! 0) {if (num 1) {count;}num num 1;}return count;
}