两数之和问题
法一:C语言暴力破解法:
根据题目要求,利用两个For语句和一个if语句将数组中任意两个不同的元素相加,只要他们的和与target相等,就记录下他们的下标,输出。代码如下:
/ * Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
static int a[2]={0};
for (int i = 0; i < numsSize - 1; i++) {
for (int j = i + 1; j < numsSize; j++) {
if (nums[i] + nums[j] == target) {
a[0] = i;
a[1] = j;
*returnSize=2;
return a;
}
}
}
*returnSize=0;
return a;
}
我第一次尝试时,在输出的时候没有使用 *returnSize=0,后来在别人的题解里发现了别人的做法,一比较之后觉得使用*return以及把int i,j的定义放在循环体外面可以大大缩短代码运算所用的时间。还有用来开辟地址返回到指针变量的malloc也是我第一次见,比我原先静态数组的定义好多了。以下是别人的解法:
/ * Note: The returned array must be malloced, assume caller calls free().
*/
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
int *a = (int *)malloc(sizeof(int) * 2);//开辟两个地址返回到指针a
int i,j;
for (i = 0; i < numsSize - 1; i++) {
{
for ( j = i + 1; j < numsSize; j++) {
{
if (nums[i] + nums[j] == target) {
a[0] = i;
a[1] = j;
*returnSize=2;
return a;
}}
}
}
}
*returnSize=0;
return a;
}
心得:这是我过了很久之后第一次编程,即使是对于自己曾经学习过的c语言也是很力不从心,刚开始的时候也犯了很多语法上的错误,试验了好几次才勉强过关。而且在分析题目的时候我还忽略了题设括号里的 **returnSize=0*导致代码的计算变慢。
##法二:C++暴力破解法
public:
vector<int> twoSum(vector<int>& nums, int target) {
int i,j;
for(i=0;i<nums.size()-1 ;i++){
for (j=i+1;j<nums.size() ;j++){
if(nums[i]+nums[j]==target){
return{i,j};
}
}
}
return {};
}
};
同样浅显易懂的方法我就不多介绍了