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;
}
}
|
作者:万能包哥 出处:http://www.cnblogs.com/mybloger/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 如果文中有什么错误,欢迎指出。以免更多的人被误导。 |
浙公网安备 33010602011771号