It is the first that I have solved a problem without baidu the answer.
problem: You are given two arrays (without duplicates)
nums1
and nums2
where nums1
’s elements are subset ofnums2
. Find all the next greater numbers for
nums1
's elements in the corresponding places ofnums2
.
The Next Greater Number of a number x in nums1
is the first greater number to its right innums2
. If it does not exist, output -1 for this number.
1,错误一:输出是vector不是一个数
2,错误二:return -1 和return nums[t]不对,
vector<int> nextGreaterElement(vector<int>& findNums, vector<int>& nums) {返回的是一个整形vector
3,break位置要调式得知】
4,vector赋初值:http://www.cnblogs.com/gtt1025/p/5859585.html
#include<iostream>
#include<string>
#include<vector>
using namespace std;
vector<int> nextGreaterElement(vector<int>& findNums, vector<int>& nums) {
vector<int> rect;
for (int i = 0; i<findNums.size(); i++)
{
for (int j = 0; j<nums.size(); j++)
{
if (findNums[i] == nums[j])
{
for (int t = j; t<nums.size(); t++)
{
if (findNums[i] < nums[t])
{
rect.push_back(nums[t]);
break;
}
if (t == nums.size() - 1)
rect.push_back(-1);
}
}
}
}
return rect;
};
int main()
{
vector<int> ilist, ilist2;
ilist.push_back(1);
ilist.push_back(3);
ilist.push_back(4);
ilist.push_back(2);
ilist2.push_back(4);
ilist2.push_back(1);
ilist2.push_back(2);
nextGreaterElement(ilist2, ilist);
}
这种只能调试,不能输出vector结果,查vector输出:http://blog.youkuaiyun.com/lovemysea/article/details/5303897
return rect;
for (std::vector<int>::iterator m = rect.begin(); m != rect.end(); m++) //用迭代器的方式输出容器对象的值
{
cout << *m << endl;
}
这样没错,就是输出不了,过了return rect;后rect就空了;
原来return rect要放在最后;
完整代码:
#include<iostream>
#include<string>
#include<vector>
using namespace std;
vector<int> nextGreaterElement(vector<int>& findNums, vector<int>& nums) {
vector<int> rect;
for (int i = 0; i<findNums.size(); i++)
{
for (int j = 0; j<nums.size(); j++)
{
if (findNums[i] == nums[j])
{
for (int t = j; t<nums.size(); t++)
{
if (findNums[i] < nums[t])
{
rect.push_back(nums[t]);
break;
}
if (t == nums.size() - 1)
rect.push_back(-1);
}
}
}
}
for (std::vector<int>::iterator m = rect.begin(); m != rect.end(); m++) //用迭代器的方式输出容器对象的值
{
cout << *m << endl;
}
return rect;
};
int main()
{
vector<int> ilist, ilist2;
ilist.push_back(1);
ilist.push_back(3);
ilist.push_back(4);
ilist.push_back(2);
ilist2.push_back(4);
ilist2.push_back(1);
ilist2.push_back(2);
nextGreaterElement(ilist2, ilist);
}
结果:
第二部实施改写,printf输出
代码:
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int nextGreaterElement(vector<int>& findNums, vector<int>& nums) {
for (int i = 0; i<findNums.size(); i++)
{
for (int j = 0; j<nums.size(); j++)
{
if (findNums[i] == nums[j])
{
for (int t = j; t<nums.size(); t++)
{
if (findNums[i] < nums[t])
{
printf( "%d\n", nums[t] );
break;
}
if (t == nums.size() - 1)
printf("%d\n", -1);
}
}
}
}
return 90;
};
int main()
{
vector<int> ilist, ilist2;
ilist.push_back(1);
ilist.push_back(3);
ilist.push_back(4);
ilist.push_back(2);
ilist2.push_back(4);
ilist2.push_back(1);
ilist2.push_back(2);
nextGreaterElement(ilist2, ilist);
}
结果: