leetcode-189. 旋转数组

leetcode-189. 旋转数组原题链接给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?示例 1:输入: nums = [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]题解

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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

进阶:

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

示例 1:

输入: nums = [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]

题解一

  1. 翻转
class Solution { 
   
public:
    void rotate(vector<int>& nums, int k) { 
   
        k %= nums.size();
        reverse(nums,0,nums.size() - 1);
        reverse(nums,0,k-1);
        reverse(nums,k,nums.size()-1);
    }
    void reverse(vector<int>&a,int l,int r){ 
   
        if(l>= r)return;
        for(int i = 0;i <= (r - l) / 2;i ++){ 
   
            int t = a[l + i];
            a[l + i] = a[r - i];
            a[r - i] = t;
        }
    }
};
  1. 环状
class Solution { 
   
public:
    void rotate(vector<int>& nums,int k) { 
   
        k %= nums.size();
        int g = gca(nums.size(),k);
        for(int i = 0;i < g;i ++){ 
   
            int t = nums[i];
            int current = i;
            do{ 
   
                int next = (current + k) % nums.size();
                int a  = nums[next];
                nums[next] = t;
                current = next;
                t = a;
            }while(current != i);
        }
    }
    int lca(int a,int b){ 
   
        return a * b / lca(a,b);
    }
    int gca(int a,int b){ 
   
        return b == 0 ? a : gca(b, a % b);
    }
};
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168755.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 零基础学Java(11)自定义类[通俗易懂]

    零基础学Java(11)自定义类[通俗易懂]前言之前的例子中,我们已经编写了一些简单的类。但是,那些类都只包含一个简单的main方法。现在来学习如何编写复杂应用程序所需要的那种主力类。通常这些类没有main方法,却有自己的实例字段和实例方法。

    2022年7月29日
    5
  • servlet和jsp的区别与联系。

    servlet和jsp的区别与联系。什么是servlet:(1)Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。(2)它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。什么是jsp:(1)JSP全名为JavaServerPages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它[1

    2022年6月23日
    28
  • Spatial Transformer Network_transgression

    Spatial Transformer Network_transgression导读上一篇通俗易懂的SpatialTransformerNetworks(STN)(一)中,我们详细介绍了STN中会使用到的几个模块,并且用pytorch和numpy来实现了他们,这篇文章我们将会利用pytorch来实现一个MNIST的手写数字识别并且将STN模块插入到CNN中STN关键点解读STN有一个最大的特点就是STN模块能够很容易的嵌入到CNN中,只需要进行非常小的修改即可。上一篇文章我们也说了STN拥有平移、旋转、剪切、缩放等不变性,而这一特点主要是依赖θ\thetaθ参数来实现的。刚开

    2022年8月31日
    2
  • python 写入文件时编码问题

    python 写入文件时编码问题本文仅供学习交流使用,如侵立删!联系方式及demo下载见文末python写入文件时编码错误UnicodeDecodeError:’utf-8’codeccan’tdecodebyte..解决:增加errors=‘ignore’withopen(‘数据.csv’,”r”,encoding=’utf-8′,errors=’ignore’,newline=””)asf1:本文仅供学习交流使用,如侵立删!企鹅、WX:1033383881(备注来意)

    2022年10月2日
    3
  • STL空间配置器解析和实现

    1.一级空间配置器实现1.1接口1.2实现2.二级空间配置器实现2.1接口2.2实现3.配置器标准接口4.测试

    2021年12月28日
    53
  • 2基本放大电路_基本放大电路详解

    2基本放大电路_基本放大电路详解基本放大电路

    2022年8月5日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号