LeetCode Merge Sorted Array JS实现返回值与控制台输出不一致问询
问题原因说明
你做LeetCode合并有序数组题写的JavaScript代码如下:
var merge = function(nums1, m, nums2, n) { //contcating two array let array = nums2.concat(nums1) // sort the array array.sort((a,b) => a-b) // remove element > m+n length return array.slice(m+n-n) };
出现「判题时结果是[1,2,3,0,0,0],自己用console打印执行结果却和预期一致,是[1,2,2,3,5,6]」的问题,根源有两点:
- 这道题根本不要求你返回新数组,要求直接修改传入的nums1原数组,判题逻辑根本不会读你return的值,只会检查传进来的nums1最终是什么内容。你所有的拼接、排序、切片操作全是在新声明的
array变量上做的,从头到尾没碰过原nums1的内容,所以判题系统读到的nums1还是最开始传进去的[1,2,3,0,0,0],自然不符合要求。 - 你自己console打印的是函数return出去的那个新数组,这个数组经过你的处理确实是
[1,2,2,3,5,6],但它和判题系统检查的原nums1是完全独立的两个数组,所以才会出现自己打印对、判题不对的错位。
顺便提两个你代码里的问题:
- 切片参数写
m+n-n纯是冗余逻辑,化简之后就是m,完全没必要写这么绕 - 就算你把return的结果直接赋值给函数里的nums1变量也没用,这只会改函数内部变量的指向,动不到外部传入的原数组,必须用索引赋值、splice这类方式直接修改原数组的内容,才能符合题目的要求。
内容的提问来源于stack exchange,提问作者ma_12
相关产品推荐
相关产品推荐

