LeetCode 解题思路 8(Hot 100)

解题思路:

  1. 三次反转法: 首先反转整个数组,然后反转前 k 个元素,最后反转剩余的 n-k 个元素。

Java代码:

java 复制代码
class Solution {
    public void rotate(int[] nums, int k) {
        int n = nums.length;
        if (n == 0 || k == 0) return;
        k %= n;

        reverse(nums, 0, n - 1);
        reverse(nums, 0, k - 1);
        reverse(nums, k, n - 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)。
  • 空间复杂度: O(1)。

解题思路:

  1. 计算左侧乘积: 创建一个结果数组 result,遍历原数组 nums,计算每个元素左侧所有元素的乘积,并将其存入 result 中对应的位置。
  2. 计算右侧乘积并与左侧乘积结合: 从右向左遍历原数组 nums,维护一个变量 rightProduct 表示当前元素右侧所有元素的乘积。将 rightProduct 与 result 中已有的左侧乘积相乘,得到最终结果。

Java代码:

java 复制代码
class Solution {
    public int[] productExceptSelf(int[] nums) {
        int n = nums.length;
        int[] result = new int[n];

        int leftProduct = 1;
        for (int i = 0; i < n; i++) {
            result[i] = leftProduct;
            leftProduct *= nums[i];
        }

        int rightProduct = 1;
        for (int i = n - 1; i >= 0; i--) {
            result[i] *= rightProduct;
            rightProduct *= nums[i];
        }

        return result;
    }
}

复杂度分析:

  • 时间复杂度: 总时间复杂度为 O(n)。
  • 空间复杂度: 使用了一个额外的数组 result 来保存结果,空间复杂度为 O(n)。
相关推荐
nice_lcj52017 分钟前
【从零理解 Spring AI · 14】RAG 的四个环节:加载、切分、向量化、检索
java·spring boot·embedding·向量数据库·rag·spring ai·ai应用开发
罗西的思考34 分钟前
【轻量化复刻大模型 / KIMI K3】AttnRes 模块交互式演示
人工智能·算法·机器学习
学长毕设2 小时前
基于springboot科创竞赛信息平台-附源码
java·spring boot·后端
聪明的笨猪猪2 小时前
Java 工程案例:AI 生成 @Async 异步线程池踩坑
java·经验分享·面试·ai编程
学长毕设3 小时前
基于SpringBoot公务员考试交流平台-附源码
java·spring boot·后端
好悬给我拽开线4 小时前
ZILOT 论文解析
算法
SL_staff5 小时前
私有化低代码:面向强监管行业的可控数字化实践
java·低代码
饮水桶_T5 小时前
JAVA IO流笔记
开发语言·数据结构·算法
三翼鸟数字化技术团队6 小时前
高性能存储引擎RocksDB:原理与Java生态实践
java
SL_staff6 小时前
JVS-APS有限产能建模的七个刚性支点:面向产线真实约束的技术实现解析
java·开源·全栈