Java实现数组移动_用Java实现数组向右的循环移动 短命女 2022-11-08 11:51 139阅读 0赞 一、题目:实现数组的向右循环移动 二、解题思路: 1、 举个例子: (1) a\[1,2,3,4,5,6\]向右循环移动2位,那我们知道结果为a\[5,6,1,2,3,4\],其示范为: 1->3,3->5,5->1 2->4,4->6,6->2这样两遍下来就得到了所要的结果 (2)a\[1,2,3,4,5,6,7\]向右循环移动3位,那我们知道结果为a\[5,6,7,1,2,3,4\],其示范为: 1->4,4->7,7->3,3->6,6->2,2->5,5->1这样一遍下来就得到了所要的结果 所以我们将数组元素的个数n跟所要移动的位数k的关系分为两种(m=min(k,n-k)):其一就是n%m==0,进行m遍可以得到结果,其二就是n%m!=0,进行一遍就可以得到结果。 2、为了节约时间和空间,我们可以用变量来记录所覆盖的数组元素。 三、源代码 1、定义一个函数: public static void move(Integer\[\] a, Integer k) \{ Integer n = a.length; Integer m = Math.min(k, n - k); Integer i, j; 2、一次执行到底即n%m!=0 if (n % m != 0) \{ Integer start = 0; //Integer now = start; Integer to = (start + k) % n; Integer getdata; Integer setdata=a\[start\]; while (to != start) \{ getdata = a\[to\]; a\[to\] = setdata; to = (to + k) % n; setdata = getdata; \} a\[to\]=setdata; \} 3、m次执行到底即n%m==0 else \{ Integer start = 0; Integer now=start; Integer to = (now + k) % n; Integer getdata; Integer setdata=a\[start\]; for (i = 0; i < m; i++) \{ start=i; setdata=a\[start\]; to=(start+k)%n; now=to; while(now!=start) \{ getdata = a\[to\]; a\[to\] = setdata; now=to; to = (to + k) % n; setdata = getdata; \} \} \} 4、主函数 public class shuzu \{ public static void main(String\[\] args) \{ Integer\[\] data = \{ 1, 2, 3, 4, 5, 6,7\}; move(data, 3); \} 水木轩昊昊 public class shuzu \{ public static void main(String\[\] args) \{ Integer\[\] data = \{ 1, 2, 3, 4, 5, 6,7\}; move(data, 3); \} if (n % m != 0) \{ Integer start = 0; //Integer now = start; Integer to = (start + k) % n; Integer getdata; Integer setdata=a\[start\]; while (to != start) \{ getdata = a\[to\]; a\[to\] = setdata; to = (to + k) % n; setdata = getdata; \} a\[to\]=setdata; \}
还没有评论,来说两句吧...