#java #arrays #function #parameters #median
Вопрос:
Я пытаюсь объединить два отсортированных массива в пустую функцию «объединено», а затем передать объединенный массив из этой функции в «findMedianSortedArray», чтобы найти медиану этого объединенного массива.
У меня возникли проблемы с пониманием того, как это сделать, и я исчерпал свой поиск в Google. как бы я смог это сделать? спасибо за вашу помощь.
Код ниже
class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2){ int[] mergedArr = new int[nums1.length nums2.length]; double median; if(mergedArr.length %2 == 0 ){ median = (mergedArr[mergedArr.length/2] mergedArr[mergedArr.length/2 - 1] ) /2; }else{ median = mergedArr[mergedArr.length/2]; } return median; } private void merged(int[] nums1, int[] nums2, int[] mergedArr){ int i = 0; int j = 0; int k = 0; while(i lt; nums1.length amp;amp; j lt; nums2.length){ if(nums1[i]lt; nums2[j]){ mergedArr[k] = nums1[i]; i ; }else{ mergedArr[k] = nums2[j]; j ; } k ; } while(i lt; nums1.length ){ mergedArr[k] = nums1[i]; i ; j ; } while(j lt; nums2.length ){ mergedArr[k] = nums2[j]; i ; j ; } } }
Ответ №1:
[1] ваш merged
код взломан. Он не увеличивается k
во втором и третьем while
цикле.
[2] Просто … назови это:
int[] mergedArr = new int[nums1.length nums2.length]; merged(nums1, nums2, mergedArr);
Первая строка создает новый массив, в котором еще ничего нет (все нули). Вторая строка вызывает merged
метод, передавая ему все 3 массива. Способ merged
, которым работает ваш метод, заключается в том, что он устанавливает значения третьего массива. Который ваш mergedArr
, поэтому, как только merged
вернется, у него будет то, что вы хотите.
Обычно вместо этого вы пишете метод , который возвращает int[]
, и заставляете merged
метод создавать этот массив. Ваше название фактически является оксюмороном: void
функция по определению ничего не возвращает. Вы пошли на творческий выбор, чтобы иметь метод, который изменяет один из его аргументов. Это работает; это не совсем современный стиль кодирования.
Комментарии:
1. Спасибо, что прояснили это. Я слишком много думал об этом, поразмыслив.