当前位置: 代码迷 >> 综合 >> LeetCode: Rotate Array
  详细解决方案

LeetCode: Rotate Array

热度:62   发布时间:2023-12-21 04:09:30.0


        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;}}
}

提交也过了。



  相关解决方案