#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Solution {
public:
//函数返回值为vector类型 函数名 twoSum 参数 是一个vector int
vector<int> twoSum(vector<int>& nums, int target) {
//获取vector容器的大小 n = 4
int n = nums.size();
vector<int> c1;
for (int i = 0; i < n; i++)
{
for(int j = i; j < n; j++)
{
if(nums[i] + nums[j] == target)
{
c1.push_back(i);
c1.push_back(j);
}
}
}
return c1;
}
};
void printVector(vector<int> &a)
{
for (vector<int>::iterator it = a.begin(); it != a.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
int main()
{
Solution s;
vector<int> nums{11,15,7,2};
int target = 9;
vector<int> c;
c = s.twoSum(nums,target);
printVector(c);
}
/*
给定一个整数数组 nums 和一个目标值 target,
请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
*/
#include <iostream>
#include <string>
#include <stdio.h>
#include <string.h>
int* nums_sum(int* buff,int target,int size)
{
//int buf[2]; //错误:
/*
在函数中创建了一个局部数组 buf,然后尝试从函数中返回该数组的地址。
这是不安全的,因为局部数组的生命周期在函数执行完毕后就结束了,
所以返回它的地址可能会导致未定义的行为。
*/
int* buf = new int[2]; // 使用动态内存分配创建数组
/* 获取buff中的元素个数 */
printf("size: %d\n",size);
// int a = sizeof(buff); //指针字节数为8
// int b = sizeof(buff[0]);
// printf("a: %d\n",a);
// printf("b: %d\n",b);
int i,j;
for(i=0;i < size;i++)
{
for(j=i+1;j<size;j++)
{
if((buff[i] + buff[j]) == target)
{
buf[0] = i;
buf[1] = j;
return buf;
}
}
}
delete[] buf; // 释放动态分配的内存
return nullptr; // 如果找不到结果,则返回nullptr
}
int main()
{
int buff[] = {2,7,11,15};
int size = sizeof(buff) / sizeof(buff[0]);
int target = 26;
int* sum = nums_sum(buff,target,size);
printf("%d\n",sum[0]);
printf("%d\n",sum[1]);
/* result 指向的是堆上分配的内存,而不是栈上的局部变量 */
delete[] sum; // 释放内存
return 0;
}