面试OR笔试45——实现next_permutation

来源:互联网 发布:趋势操盘软件 编辑:程序博客网 时间:2024/05/20 07:20

题目及要求

1.1 题目描述

实现next_permutation()函数。

 

2 解答

2.1 代码

template<typename It>bool next_permutation_m(It beg, It end) {if (!(beg < end)) return false;const auto rbeg{ reverse_iterator<It>(end) }, rend{ reverse_iterator<It>(beg) };auto it1(next(rbeg));while (!(it1 == rend || *it1 < *prev(it1))) ++it1;if (it1 == rend) {reverse(rbeg, rend);return false;}auto it2{ rbeg };while (!(*it1 < *it2)) ++it2;swap(*it1, *it2);// 上面三行等价写法//swap(*find_if(rbeg, it1, bind1st(less<iterator_traits<It>::value_type>(), *it1)),*it1);reverse(rbeg, it1);return true;}template<typename It>bool next_permutation_m1(It beg, It end) {if (!(beg < end)) return false;auto it1(end - 1);while (!(it1 == beg || *(it1 - 1) < *it1)) --it1;if (it1 == beg) {reverse(beg, end);return false;}--it1;auto it2(end-1);while (!(*it1 < *it2)) --it2;swap(*it1, *it2);reverse(it1+1,end);return true;}




原创粉丝点击