本学期第二个简单代码练手!
Next Greater Element 1
第一步:理解题意
1.向量findNums是nums的子集
2.向量findNums中的每个元素都对应nums的元素,并找到对应的位置。
3.对于nums中对应的元素,如果该元素之后又比该元素大的数,就把该数放到临时向量中去。若不然,把-1放到临时向量中去。
第二步:确定算法
很明显要进行查找,由于不太会用查找函数,我就自己写了查找函数,用for循环来实现的。
第三步:完成代码
vector<int> nextGreaterElement(vector<int>& findNums, vector<int>& nums) {
vector<int> temp;//................................................临时向量,用于储存输出
for(int i = 0; i< findNums.size(); i++){//.........................第一个循环
int t = -1;
for(int j = 0; j < nums.size();j++){//.........................第二个循环,至此完成查找功能
if(findNums[i] == nums[j]){
for(int k = j; k < nums.size();k++){//.................第三个循环,用以判断查找到的位置后的元素是不是存在大于该元素的
if(findNums[i] < nums[k]){
t = nums[k];
break;//.......................................如果存在立即结束循环,并将该值存放到临时变量中去
}
}
}
}
temp.push_back(t);
}
return temp;
}
代码编写的历程:
1.此时初始化临时变量的时候将临时变量的大小确定为要查找向量的大小,这样的话,每个元素便被机器初始化为0,导致以下结果的出现
2.改正第一个错误后,又发现另一个错误
根据数据分析,是算法的问题。我只考虑到了后面一个元素是不是大于查找元素,忽略了之后很多的元素。因为题目给的数据巧妙地避开了这种情况,虽然也有怀疑,但并没有考虑到算法之中。
最后又加了一个循环,得到正确的结果。
最后:
我认为,没有用到查找函数,我这种查找很浪费时间,毕竟用了三个循环。
另外,这个题目类型是属于stack类型里的,在接下来的时间里,我要去考虑其stack解法