如何获取数组/vector中最大元素的最大索引?
获取数组中最大元素的最后出现索引
目前我知道两种方法,但想找更简便的实现方式:
方法一:返回最大元素的最小索引
用标准库的max_element直接查找,但它返回的是第一个(最小索引)最大元素的迭代器:
vector<int> nums= {3,2,1,0,2,3,3,1,0,0}; return max_element(nums.begin(), nums.end())-nums.begin();
这个方法不符合需求,因为它返回的是最大元素的最小索引。
方法二:反向遍历找最后一个最大元素
先获取最大值,再从数组末尾反向遍历找到第一个匹配的元素:
vector<int> nums= {3,2,1,0,2,3,3,1,0,0}; int n = *max_element(nums.begin(), nums.end()); for(int i=nums.size()-1; i>-1; i--){ if(nums[i]==n) { return i; break; } }
但这个方法需要手动写循环遍历,想知道有没有更简便的方式。
更简便的实现:用反向迭代器结合max_element
直接利用反向迭代器,让max_element从数组末尾开始查找,这样找到的就是原数组中最后出现的最大元素,再计算对应的原数组索引即可:
vector<int> nums = {3,2,1,0,2,3,3,1,0,0}; auto last_max_it = max_element(nums.rbegin(), nums.rend()); // 计算原数组中的索引 return nums.size() - 1 - distance(nums.rbegin(), last_max_it);
或者更简洁的写法:
return nums.size() - (max_element(nums.rbegin(), nums.rend()) - nums.rbegin()) - 1;
这个方法完全借助标准库函数实现,无需手动写循环,代码更简洁且可读性更高。
内容的提问来源于stack exchange,提问作者yokgn
相关产品推荐
相关产品推荐

