zoukankan      html  css  js  c++  java
  • leetcode题解

    189 旋转数组

    方法 1:暴力

    class Solution {
        public void rotate(int[] nums, int k) {
            int temp, previous;
            for (int i = 0; i < k; i++) {
                previous = nums[nums.length - 1];
                for (int j = 0; j < nums.length; j++) {
                    temp = nums[j];
                    nums[j] = previous;
                    previous = temp;
                }
            }
        }
    }

    复杂度分析

    时间复杂度:O(n*k)O(n∗k) 。每个元素都被移动 1 步(O(n)O(n)) k次(O(k)O(k)) 。
    空间复杂度:O(1)O(1) 。没有额外空间被使用。

    方法 2:使用额外的数组

    public class Solution {
        public void rotate(int[] nums, int k) {
            int[] a = new int[nums.length];
            for (int i = 0; i < nums.length; i++) {
                a[(i + k) % nums.length] = nums[i];
            }
            for (int i = 0; i < nums.length; i++) {
                nums[i] = a[i];
            }
        }
    }

    时间复杂度: O(n)O(n) 。将数字放到新的数组中需要一遍遍历,另一边来把新数组的元素拷贝回原数组。
    空间复杂度: O(n)O(n)。另一个数组需要原数组长度的空间。

    方法 4:使用反转

    public class Solution {
        public void rotate(int[] nums, int k) {
            k %= nums.length;
            reverse(nums, 0, nums.length - 1);
            reverse(nums, 0, k - 1);
            reverse(nums, k, nums.length - 1);
        }
        public void reverse(int[] nums, int start, int end) {
            while (start < end) {
                int temp = nums[start];
                nums[start] = nums[end];
                nums[end] = temp;
                start++;
                end--;
            }
        }
    }
    • 时间复杂度:O(n) 。 n 个元素被反转了总共 3 次。
    • 空间复杂度:O(1) 。 没有使用额外的空间。
  • 相关阅读:
    dbt macro 说明
    构建一个dbt 数据库适配器
    dbt 包的构建
    dbt 生产环境使用
    来自官方的一些dbt 最佳实践
    knowledge-repo 知识管理简单试用
    dbt 包管理
    dbt 的知识文档管理
    knowledge 开源知识管理系统
    hasura graphql server 集成gitlab
  • 原文地址:https://www.cnblogs.com/coding-fairyland/p/12270123.html
Copyright © 2011-2022 走看看