题目
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例 :
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
解答
第一次用力扣,提交时不知道只要提交关键部分代码就行,自己还写了个main函数,写得乱七八糟
#include<stdio.h>
#include <iostream>
#include <vector> //verctor好比是C语言中的数组,但是vector又具有数组没有的一些高级功能
using namespace std;
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> ans(2);
int flag = -1;//用于跳出多重循环
for (int i = 0; i < nums.size(); i++) {
ans[0] = i;
for (int j = i + 1; j < nums.size(); j++) {
if (target == nums[i] + nums[j]) {
ans[1] = j;
flag = 1;
break;
}
}
if (flag == 1) {
break;
}
}
return ans;
}
};
int main() {
Solution s;
vector<int> num;
int target;
int n;
while (cin >> n) {
num.push_back(n);
if (cin.get() == '\n') break;
}
cin >> target;
vector<int> answer(2);
answer = s.twoSum(num, target);
cout << "[" << answer[0] << "," << answer[1] << "]";
return 0;
}
问题与总结
1.vector
根据题目给的模板,第一次遇到vector,vector是一个可以不用再初始化就必须制定大小的边长数组,其添加元素必须使用push_back函数,且这个元素被加在数组尾部。
for (int i = 0; i < 20; i++)
{
v1.push_back(i);
}
关于vector的使用详解见博客(1条消息) vector 详解(C++)_黑马星云的博客-CSDN博客_c++ vector、
2.从键盘输入未知长度数组,遇到换行停止
到现在还是不太会数组的输入和存储,所谓基础不牢,地动山摇,代码练的太少的后果
int n;
while (cin >> n) {
num.push_back(n);
if (cin.get() == '\n') break;
}
3.C++如何跳出两层循环
break只能跳出当前一层循环,可以设置一个flag标志来控制多层循环跳出
今日寄语:
还是太懒,写个简单的问题都拖拉了好几天,以后争取每天至少能练习一道题