Étant donné la tâche zeroMax zeroMax de CodingBat :
Renvoie une version du tableau donné où chaque valeur zéro dans le tableau est remplacée par la plus grande valeur impaire à droite du zéro dans le tableau. S'il n'y a pas de valeur impaire à droite du zéro, laissez le zéro comme zéro.
zeroMax([0, 5, 0, 3]) → [5, 5, 3, 3]
zeroMax([0, 4, 0, 3]) → [3, 4, 3, 3]
zeroMax([0, 1, 0]) → [1, 1, 0]
Ma solution à cette tâche passe tous les tests sur CodingBat :
public int[] zeroMax(int[] nums) {
boolean containsZero = java.util.stream.IntStream.of(nums).anyMatch(x -> x == 0);
if (!containsZero) {
return nums;
}
int[] zeroMax = new int[nums.length];
int largestOddRight = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] == 0) {
for (int j = i+1; j < nums.length; j++) {
if (nums[j] % 2 != 0) {
if (nums[j] > largestOddRight) {
largestOddRight = nums[j];
}
}
}
zeroMax[i] = largestOddRight;
largestOddRight = 0;
} else {
zeroMax[i] = nums[i];
}
}
return zeroMax;
}
Mais j'ai la question suivante :
Comment est-il possible de résoudre cette tâche en utilisant Stream API ?
Diffusez sur les indices de votre tableau, vérifiez si l'élément actuel est égal à zéro, sinon mappez-le sur lui-même, si oui, diffusez à nouveau sur le reste de votre tableau à partir de la position actuelle en utilisant Arrays.stream(array, from, to)
les cotes du filtre, trouvez un maximum facultatif, si facultatif présent retourne ça orElse retourne l'élément courant
public int[] zeroMax(int[] nums){
boolean containsZero = java.util.stream.IntStream.of(nums).anyMatch(x -> x == 0);
if (!containsZero) {
return nums;
}
return java.util.stream.IntStream.range(0, nums.length).map(
i -> nums[i] != 0 ? nums[i] : Arrays.stream(nums, i, nums.length)
.filter(j -> j % 2 == 1)
.max()
.orElse(nums[i]))
.toArray();
}
Эта статья взята из Интернета, укажите источник при перепечатке.
Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.
я говорю два предложения