热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

算法练习贴7旋转数组(Java、C)

给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。(题目来源:力扣网)示例1:输入:[1,2,

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

(题目来源:力扣网)
示例 1:

输入: [1,2,3,4,5,6,7] 和 k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右旋转 1: [7,1,2,3,4,5,6]
向右旋转 2: [6,7,1,2,3,4,5]
向右旋转 3: [5,6,7,1,2,3,4]

示例 2:

输入: [-1,-100,3,99] 和 k = 2
输出: [3,99,-1,-100]
解释:
向右旋转 1: [99,-1,-100,3]
向右旋转 2: [3,99,-1,-100]

解决方式一(反转数组):

Java版:

package com.lxf.demo02;public class Rotate2 {public static int[] rotate(int[] nums, int k) {k %&#61; nums.length;//将整个数组反转reverse(nums, 0, nums.length - 1);//反转数组0到k-1的数reverse(nums, 0, k - 1);//反转数组k到最后一位的数reverse(nums, k, nums.length - 1);return nums;}/*** 反转传入数组的指定区间顺序* &#64;param nums 传入的数组* &#64;param start 数组开始下标* &#64;param end 数组结束下标*/public static void reverse(int[] nums, int start, int end) {while (start < end) {int temp &#61; nums[start];nums[start] &#61; nums[end];nums[end] &#61; temp;start&#43;&#43;;end--;}}public static void main(String[] args) {int[] nums&#61;{1,2,3,4,5,6,7};for (int i : rotate(nums, 3)) {System.out.print(i);}}
}

C语言版&#xff1a;

#include<stdio.h> //反转数组函数
void reverse_arrays(int start,int end,int* nums){while(start<end){int temp&#61;nums[start];nums[start]&#61;nums[end];nums[end]&#61;temp;start&#43;&#43;;end--;}
}
//旋转数组k位函数
void rotate(int* nums, int numsSize, int k){k&#61;k%numsSize;if(k&#61;&#61;0){return;}reverse_arrays(0,numsSize-1,nums);//将数组元素全部反转reverse_arrays(0,k-1,nums);//将下标0至k-1的元素反转 reverse_arrays(k,numsSize-1,nums);//将下标k至numSize-1的元素反转 return;
}

更多解法&#xff1a;题解


推荐阅读
author-avatar
myldd
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有