zoukankan      html  css  js  c++  java
  • 数组反转

    题目描述
    给定一个数组,将数组中的元素向右移动 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]

    #include <vector>
    //要先实现一个数组反转可以通过三次反转实现
    //references:https://blog.csdn.net/qq_28584889/article/details/83655019?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
    
    class Solution{
    public:
        //数组反转
        void reverseArray(vector<int>& array, int begin, int end){
            int temp,tmp_end = end;
            for(int i = begin; i <= (begin+end)/2; i++){
                temp = array[i];
                array[i] = array[tmp_end];
                array[tmp_end] = temp;
                tmp_end--;
            }
        }
    
        void rotate(vector<int>& nums, int k){
            int len = nums.size();
            k %= len;
            if(k == 0)
                return;
            reverseArray(nums,0,len-k-1);
            reverseArray(nums,len-k,len-1);
            reverseArray(nums,0,len-1);
            //C++自带的反转函数
    //        reverse(nums.begin(),nums.end()-k);
    //        reverse(nums.end()-k,nums.end());
    //        reverse(nums.begin(),nums.end());
        }
    };
    
    //Solution2:
    void reverseArray(int nums[],int start, int end){
        int temp;
        while(start < end){
            temp = nums[start];
            nums[start++] = nums[end];
            nums[end--] = temp;
        }
    }
    
    void rotate(int nums[], int n, int k){
        k%=n;
        if(k<=0) return;
        reverseArray(nums,n-k,n-1);
        reverseArray(nums,0,n-k-1);
        reverseArray(nums,0,n-1);
    }
    

      

    怕什么真理无穷,进一寸有一寸的欢喜。---胡适
  • 相关阅读:
    linux 备份当前文件
    zz Apache 2.2.15 + PHP 5.3.2+ mysql windows环境配置
    zz iframe父子窗口间js方法调用
    批处理命令里获取本机的机器名
    Cache Concurrency Problem False Sharing
    因为添加assembly到GAC引起的Windows Azure Web Role部署失败
    求数组中满足a[i]<a[j]的相距最远的元素
    Dispose模式
    比较汇编指令 LEA 和 MOV
    读写Unicode字符串(UTF8,UTF16…)
  • 原文地址:https://www.cnblogs.com/hujianglang/p/12449858.html
Copyright © 2011-2022 走看看