栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

转换数组C ++中的元素

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

转换数组C ++中的元素

以下功能

rotate
基于提醒(您是在“ mod”操作下表示此意思吗?)

这也是相当有效的。

// Helper function.// Finds GCD. // See http://en.wikipedia.org/wiki/Euclidean_algorithm#Implementationsint gcd(int a, int b) {return b == 0 ? a : gcd(b, a % b);}// Number of assignments of elements in algo is// equal to (items.size() + gcd(items.size(),r)).void rotate(std::vector<int>& items, int r) {  int size = (int)items.size();  if (size <= 1) return; // nothing to do  r = (r % size + size) % size; // fits r into [0..size)  int num_cycles = gcd(size, r);  for (int first_index = 0; first_index < num_cycles; ++first_index) {    int mem = items[first_index]; // assignment of items elements    int index = (first_index + r) % size, index_prev = first_index;    while (index != first_index) {      items[index_prev] = items[index]; // assignment of items elements      index_prev = index;      index = (index + r) % size;    };    items[index_prev] = mem; // assignment of items elements  }}

当然,如果如其他答案中所述适合更改数据结构,则可以获得更有效的解决方案。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/387582.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号