LeetCode: Rotate Array

来源:互联网 发布:软件 开发 编辑:程序博客网 时间:2024/05/17 21:44


        while(k>=n){            k=k-n;        }        std::rotate(nums, nums+n-k, nums+n);


......


具体可以看stl_algo.h,有forward, bidirectional, random iterator版本。


我不明白的是forward_iterator版本:


      _ForwardIterator __first2 = __middle;      do{  std::iter_swap(__first, __first2);  ++__first;  ++__first2;  if (__first == __middle)    __middle = __first2;}      while (__first2 != __last);      __first2 = __middle;      while (__first2 != __last){  std::iter_swap(__first, __first2);  ++__first;  ++__first2;  if (__first == __middle)    __middle = __first2;  else if (__first2 == __last)    __first2 = __middle;}

第一个do while loop的作用是什么。

这么写:

void myswap(int& m, int& n){m = m^n;n = m^n;m = m^n;}void rotate(int nums[], int n, int k) {while (k>=n){k = k - n;}if (k <= 0) return;k = n - k;int p = k;int s = 0;int e = n;while (p!=n){myswap(nums[s], nums[p]);s++; p++;if (s==k){k = p;}else if(p==n){p = k;}}}

提交也过了。



0 0