📌  相关文章
📜  Java程序查找范围求和查询,以按 K 索引对 Array 进行逆时针旋转(1)

📅  最后修改于: 2023-12-03 15:32:05.378000             🧑  作者: Mango

Java程序介绍

本文将介绍两个常用的Java程序:一是查找范围求和查询,二是按 K 索引对 Array 进行逆时针旋转。

查找范围求和查询
描述

给定一个整数数组 nums。求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。

代码实现
class NumArray {
    private int[] nums;
    private int[] sums;

    public NumArray(int[] nums) {
        this.nums = nums;
        sums = new int[nums.length + 1];
        for (int i = 0; i < nums.length; i++) {
            sums[i + 1] = sums[i] + nums[i];
        }
    }

    public int sumRange(int i, int j) {
        return sums[j + 1] - sums[i];
    }
}
测试
public static void main(String[] args) {
    int[] nums = {-2, 0, 3, -5, 2, -1};
    NumArray numArray = new NumArray(nums);
    System.out.println(numArray.sumRange(0, 2)); // 1
    System.out.println(numArray.sumRange(2, 5)); // -1
}
按 K 索引对 Array 进行逆时针旋转
描述

给定一个数组 nums,将数组按照 k 旋转。(即,将数组向左旋转 k 步,其中 k 是非负数。)

代码实现
class RotateArray {
    public void rotate(int[] nums, int k) {
        k = k % nums.length;
        reverse(nums, 0, nums.length - 1);
        reverse(nums, 0, k - 1);
        reverse(nums, k, nums.length - 1);
    }

    private void reverse(int[] nums, int start, int end) {
        while (start < end) {
            int temp = nums[start];
            nums[start++] = nums[end];
            nums[end--] = temp;
        }
    }
}
测试
public static void main(String[] args) {
    int[] nums = {1, 2, 3, 4, 5, 6, 7};
    RotateArray ra = new RotateArray();
    ra.rotate(nums, 3);
    System.out.println(Arrays.toString(nums)); // [5, 6, 7, 1, 2, 3, 4]
}

以上就是Java程序查找范围求和查询和按 K 索引对 Array 进行逆时针旋转的介绍及代码实现。