查看文章
 
2.17数组循环移位
2008-07-15 9:59 P.M.

这个问题,我在面试中也问过,几乎所有的candidates都能给出解法一,至于解法二,并没有新意,读过STL源代码的人都知道:

STL里面的rotate函数<algorithm>,就是用这种方法实现的

template<class _BidIt> inline
    void _Rotate(_BidIt _First, _BidIt _Mid, _BidIt _Last,   bidirectional_iterator_tag)
    {   
        std::reverse(_First, _Mid);
        std::reverse(_Mid, _Last);
        std::reverse(_First, _Last);
    }

但是,STL只是在一个数组里面移位,所移动的长度不会超过数组的大小。如果一个长度是3的数组循环右移1000000位,也就是 K >> N的时候

RightShift(int* arr, int N, int k)

{

K %= N ; //很简单但是不同反响的一句

..........

}


类别:编程之美||添加到搜藏 |分享到i贴吧|浏览(915)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu