zoukankan      html  css  js  c++  java
  • leetcode------Rotate Array

    标题: Rotate Array
    通过率: 18.4%
    难度: 简单

    Rotate an array of n elements to the right by k steps.

    For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].

    Note:
    Try to come up as many solutions as you can, there are at least 3 different ways to solve this problem.

    [show hint]

    Hint:
    Could you do it in-place with O(1) extra space?

    Credits:
    Special thanks to @Freezen for adding this problem and creating all test cases.

    第一种思路,k等于多少就循环多少次:意思是若k=3则所有元素向后移动三次,越界的则进行放在第一位操作,

    具体看代码:

     1 public class Solution {
     2     public void rotate(int[] nums, int k) {
     3         int length=nums.length;
     4         int value=0;
     5         for(int i=0;i<k;i++){
     6             value=nums[length-1];
     7             for(int j=nums.length-2;j>=0;j--){
     8                 nums[j+1]=nums[j];
     9             }
    10             nums[0]=value;
    11         }
    12     }
    13 }

    上述思路明显不是高效的,下面对数据进行分析,

    1.2.3.4.5

    当k=3时结果是3,4,5,1,2

    把结果逆序下 可以看出来是   2,1,5,4,3逆序结果与正序进行对比

    1,2,3,4,5

    2,1,5,4,3

    发现在k-1的位置前后都是逆序的,

    第二种分析。

    原数据逆序

    5,4,3,2,1

    3,4,5,1,2

    也是在k-1位置前后进行逆序,

    那么我只用对原数据做如下操作就可得到结果:

    1、原数据逆序

    2,k-1之前逆序

    3,k-1之后逆序

    直接看代码:

     1 public class Solution {
     2     public void rotate(int[] nums, int k) {
     3         int length=nums.length;
     4         k%=length;
     5         res(nums,0,length-1);
     6         res(nums,0,k-1);
     7         res(nums,k,length-1);
     8         
     9     }
    10     public void res(int []arraynum,int start,int end){
    11         while(start<=end){
    12             int temp=arraynum[start];
    13             arraynum[start]=arraynum[end];
    14             arraynum[end]=temp;
    15             start++;
    16             end--;
    17         }
    18     }
    19 }
  • 相关阅读:
    Quartus II -----破解
    博客诞生
    OpenMPI 学习笔记(一)并行计算机和分布式计算
    信息安全(1):安全策略
    认证
    SSL/TLS 和Https
    IPSec 网络协议安全
    C# 快速高效率复制对象另一种方式 表达式树
    C语言学习指针和数组2
    C语言学习二维数组
  • 原文地址:https://www.cnblogs.com/pkuYang/p/4311331.html
Copyright © 2011-2022 走看看