两数之和解法

两数之和问题

法一: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 {}; 
    }
 
};

同样浅显易懂的方法我就不多介绍了

发布了40 篇原创文章 · 获赞 2 · 访问量 603

猜你喜欢

转载自blog.csdn.net/qq_45560526/article/details/104402679