做网站难吗?,留手机号广告,什么是网络营销?网络营销的特点有哪些?,歌曲网站模板一、题目
新年第一题#xff0c;避免老年痴呆#xff01; 题源#xff1a;牛客
一个数组A中存有 n 个整数#xff0c;在不允许使用另外数组的前提下#xff0c;将每个整数循环向右移 M#xff08; M 0#xff09;个位置#xff0c;即将A中的数据由#xff08;A0…一、题目
新年第一题避免老年痴呆 题源牛客
一个数组A中存有 n 个整数在不允许使用另外数组的前提下将每个整数循环向右移 M M 0个位置即将A中的数据由A0 A1 ……AN-1 变换为AN-M …… AN-1 A0 A1 ……AN-M-1 最后 M 个数循环移至最前面的 M 个位置。 如果需要考虑程序移动数据的次数尽量少要如何设计移动的方法
数据范围整数范围
进阶空间复杂度O(1) 时间复杂度O(n)例 6,2 [1,2,3,4,5,6] [5,6,1,2,3,4]
二、思路
将数组 0 ~ n-m-1 的子数组翻转一下。4,3,2,1,5,6将数组n-m ~ n-1 的子数组翻转一下。4,3,2,1,6,5将数组0 ~ n-1 直接翻转一下。5,6,1,2,3,4over !
三、代码 public static void main(String[] args) {//一个数组A中存有 n 个整数在不允许使用另外数组的前提下将每个整数循环向右移 M M 0个位置// 即将A中的数据由A0 A1 ……AN-1 变换为AN-M …… AN-1 A0 A1 ……AN-M-1 // 最后 M 个数循环移至最前面的 M 个位置。// 如果需要考虑程序移动数据的次数尽量少要如何设计移动的方法////数据范围//进阶空间复杂度 时间复杂度// 6,2 [1,2,3,4,5,6]// [5,6,1,2,3,4]// 1、现将1~n-m数据翻转 n-m~n数据翻转 最后将1~n数据翻转Scanner scanner new Scanner(System.in);int n scanner.nextInt();int m scanner.nextInt();ArrayListInteger nums new ArrayList();for(int i 0 ; i n ; i){int num scanner.nextInt();nums.add(num);}overturn(nums,0,n-m-1);overturn(nums,n-m,n-1);overturn(nums,0,n-1);System.out.println(nums);}public static void overturn(ListInteger nums , int start,int end){int mid (start end)/2;for(int istart; imid; i){//交换Integer startNum nums.get(i);nums.set(i,nums.get(end));nums.set(end,startNum);end--;}}ps:仅提供思路不保证代码能oc