我是靠谱客的博主 发嗲乌龟,最近开发中收集的这篇文章主要介绍LeetCode——给定一个数组,将数组中的元素向右移动 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]

说明:

  • 尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。
  • 要求使用空间复杂度为 O(1) 的原地算法。

 

代码:

  1. class Solution {
        public void rotate(int[] nums, int k) {
        	int n=nums.length;            //求数组长度
        	if (k>n) {                    //当右移次数大于数组长度,取模后的只为新的要移动的次数
        		k=k%n;    			
    		} 	
        	int[] rot=new int[n];         //新建一个数组,将nums幅值进去(此时空间复杂度不满足O(1))
        	rot=Arrays.copyOf(nums, n);  //目的是最后结果在nums数组上操作,这样LeetCode系统可以检测
        	
        	for (int i = 0; i < n; i++) {   //每个数都循环移动k个数
        		int p=(i+k)%n;
        		nums[p]=rot[i];
    		}
    
        	for (int x:nums) {            //输出可不写,仅为自己查看结果
    			System.out.println(x);
    		}     
        }
    }

    2.

    class Solution {
        public void rotate(int[] nums, int k) {
        	int n=nums.length;
        	if (k>n) {
        		k=k%n;    			
    		} 		
    	    for (int i = 1; i <k; i++) {         //进行k次循环,每次向右移动一位
    	    	 int temp=nums[n-1];
    			for (int j = n-2; j >=0; j--) {
    				nums[j+1]=nums[j];
    			}
    			nums[0]=temp;
    		}   
    		for (int x:nums) {
    			System.out.println(x);
    		}      
        }
    }

     

最后

以上就是发嗲乌龟为你收集整理的LeetCode——给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。题目:代码:的全部内容,希望文章能够帮你解决LeetCode——给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。题目:代码:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部