mybloger

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

15、旋转数组

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
示例 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]
示例 2:

输入:nums = [-1,-100,3,99], k = 2
输出:[3,99,-1,-100]
解释: 
向右轮转 1 步: [99,-1,-100,3]
向右轮转 2 步: [3,99,-1,-100]
class Solution {
    // 方法一:直接把移动后的数据使用一个新数组接,之后在copy到原来数组
    public void rotate(int[] nums, int k) {
        int n = nums.length;
        int[] newArr = new int[n];
        for (int i = 0;i < n;i++) {
            newArr[(i + k) % n] = nums[i];
        }
        System.arraycopy(newArr,0,nums,0,n);
    }
}
class Solution {
    // 方法二:只用原数组
    public void rotate(int[] nums, int k) {
        k = k % nums.length;

        int startIndex = 0;
        int curNumber = nums[k];
        nums[k] = nums[0];
        int curIndex = k;
        int count = 1;
        while (count < nums.length) {
            curIndex = (curIndex + k) % nums.length;
            int temp = nums[curIndex];
            nums[curIndex] = curNumber;
            curNumber = temp;
            count++;

            if (startIndex == curIndex) {
                curNumber = nums[++curIndex];
                startIndex = curIndex;
            }
        }

    }
}

16、除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。

题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32 位 整数范围内。

请 不要使用除法,且在 O(n) 时间复杂度内完成此题。

 

示例 1:

输入: nums = [1,2,3,4]
输出: [24,12,8,6]
示例 2:

输入: nums = [-1,1,0,-3,3]
输出: [0,0,9,0,0]
class Solution {
    public int[] productExceptSelf(int[] nums) {
        int length = nums.length;

        int[] L = new int[length];
        int[] R = new int[length];

        int[] anwser = new int[length];

        L[0] = 1;
        for (int i = 1; i < length; i++) {
            L[i] = nums[i - 1] * L[i - 1];
        }

        R[length - 1] = 1;
        for (int i = length - 2;i >= 0;i --) {
            R[i] = nums[i + 1] * R[i + 1];
        }

        for (int i = 0;i < length;i ++) {
            anwser[i] = L[i] * R[i];
        }
        
        return anwser;
    }
}
posted on 2025-06-08 21:19  万能包哥  阅读(13)  评论(0)    收藏  举报