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

该博客探讨了LeetCode中的一道题目,涉及将数组元素向右移动k个位置的原地算法。提供了示例及至少三种解决方案,强调实现空间复杂度为O(1)的要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

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

示例 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);
    		}      
        }
    }

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值