返回信息流题目是这样的:
Rotate an array of n elements to the right by k steps.
For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].
我的code是这样的:
public class Solution {
public void rotate(int[] nums, int k) {
int length = nums.length;
int[] tmp = new int[length];
k %= length;
if (k < 0) {
k += length;
}
for (int i = 0; i < length; i++) {
tmp[(i + k) % length] = nums[i];
}
nums = tmp;
}
}
leetcode说结果错误:
Input: [1,2], 1
Output: [1,2]
Expected: [2,1]
我在本地运行结果就是[2, 1]啊
求各位支支招,看我哪里错了
这是一条镜像帖。来源:北邮人论坛 / java / #39444同步于 2015/3/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
[问题]关于leetcode上的一道题
noEasy
2015/3/24镜像同步38 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
感觉气氛上说是因为nums传进来的是指向数组的一个引用。
而你生成了一个新的tmp的数组然后让nums指向了新的数组。
而假设外面有个调用这个函数的,气氛上说oj应该也是这么干的。
int[] test = ....
rotate(test, 3)
这时候你只在函数里改了nums指向的数组,外面的test指向的数组没有改变。
如果你把nums=tmp换成
for(int i=0;i<length;i++)
{
nums[i]=tmp[i];
}
就行了。
不过这种copy的方法会多用一个数组的。建议lz考虑下inline的方法。
【 在 noEasy 的大作中提到: 】
: 题目是这样的:
: Rotate an array of n elements to the right by k steps.
: For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].
: ...................
你的理解力太强了。[ema3]
把nums = tmp
换作
for (int i = 0; i < length; i++) {
nums[i] = tmp[i];
}
就accepted了
thx
【 在 aiquestion 的大作中提到: 】
: 感觉气氛上说是因为nums传进来的是指向数组的一个引用。
: 而你生成了一个新的tmp的数组然后让nums指向了新的数组。
: 而假设外面有个调用这个函数的,气氛上说oj应该也是这么干的。
: ...................
inline啊亲,inline啊。。。AC不是终点啊亲!
【 在 noEasy 的大作中提到: 】
: 你的理解力太强了。
: 把nums = tmp
: 换作
: ...................