diff --git "a/\347\256\227\346\263\225\346\200\235\347\273\264\347\263\273\345\210\227/\347\203\247\351\245\274\346\216\222\345\272\217.md" "b/\347\256\227\346\263\225\346\200\235\347\273\264\347\263\273\345\210\227/\347\203\247\351\245\274\346\216\222\345\272\217.md" index cd163bf415909f389a0e12cb831603537daf2ad2..c83ab178fe2f2f9e8b8f2d98a22ba67691de2c24 100644 --- "a/\347\256\227\346\263\225\346\200\235\347\273\264\347\263\273\345\210\227/\347\203\247\351\245\274\346\216\222\345\272\217.md" +++ "b/\347\256\227\346\263\225\346\200\235\347\273\264\347\263\273\345\210\227/\347\203\247\351\245\274\346\216\222\345\272\217.md" @@ -151,6 +151,52 @@ void reverse(int[] arr, int i, int j) { ======其他语言代码====== +### c++ +[fengshuu](https://github.com/fengshuu) 提供 C++ 解法代码: +```cpp +class Solution { +public: + vector pancakeSort(vector& arr) { + sort(arr, arr.size()); + return res; + } + +private: + // 记录反转操作序列 + vector res; + void sort(vector& cakes, int n){ + // base case + if(n == 1) return; + + // 寻找最大饼的索引 + int maxCakeIndex = max_element(cakes.begin(), cakes.begin() + n) - cakes.begin(); + + // 下面进行把最大的饼放到最后的两次翻转 + // 如果最后一个饼就是最大的, 就不需要翻转, 直接进行下次递归 + if (maxCakeIndex == n-1){ + sort(cakes, n - 1); + return; + } + + // 第一次翻转, 将最大饼翻到最上面 + // 如果第一个饼本来就是最大的, 就不需要第一次翻转. + if (maxCakeIndex != 0) { + reverse(cakes.begin(), cakes.begin() + maxCakeIndex + 1); + res.push_back(maxCakeIndex + 1); + } + + // 第二次翻转,将最大饼翻到最下面 + reverse(cakes.begin(), cakes.begin() + n); + res.push_back(n); + + // 递归调用 + sort(cakes, n - 1); + } +}; +``` + +### java + [L-WEIWEI](https://github.com/L-WWEEII) 提供 第969题的 Java 代码: ```java