Правила[Одномерные массивы]Дана последовательность действительных чисел a1, a2, ..., an. Заменить все ее члены, большие данного Z, этим числом. Подсчитать количество замен.
public static int changeValueMoreThenKey(int key, int... array) {
int countChange = 0;
if (array.length == 0)
throw new IllegalArgumentException("Последовательность нулевой длинны");
for (int value : array) {
if (value < key) {
value = key;
countChange++;
}
}
return countChange;
}
как насчет параллельного решения?) Собственно идея в чем:
1. Задаем количество нитей, которые будут менять массив.
2. Выделяем стандартный кусок массива, который будем обрабатывать и остаток, который мог бы остаться необработанным, т.к. размер массива может быть некратен числу нитей. Этот остаток отдадим нулевой нити.
3. Далее в цикле запускаем нити, который будут менять свои куски.
4. Ну и смотрим кол-во замен (статическая переменная count) и сам получившийся массив.
класс Solution
public class Solution {
public static int count=0;
public static int numberOfThreads=6;
public static void main(String[] args) throws InterruptedException {
double[] arr=new double[100];
Arrays.fill(arr,6.0); // заполняем массив
double z = 5;
//выделяем каждой нити кусок и остаток, который отдадим нулевой нити
int step = arr.length/numberOfThreads;
int additionalElements = arr.length%numberOfThreads;
//нулевой нити отдатся обычный кусок + остаток
int firstIndex=0;
int lastIndex=step+additionalElements;
for (int i=0;i<numberOfThreads;i++){
new ReplaceThread(arr,firstIndex,lastIndex,z).run();
firstIndex=lastIndex; //далее каждой последующей нити будет отдаваться стандарный кусок массива
lastIndex+=step;
}
Thread.sleep(500);
System.out.println(count);
System.out.println(Arrays.toString(arr));
}
}
класс ReplaceThread
public class ReplaceThread extends Thread {
private int firstIndex;
private int lastIndex;
private double z;
private double[] arr;
public ReplaceThread(double[] arr,int firstIndex,int lastIndex,double z){
this.arr=arr;
this.firstIndex=firstIndex;
this.lastIndex=lastIndex;
this.z=z;
}
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Реализовал на int'ах, правда)
1. Задаем количество нитей, которые будут менять массив.
2. Выделяем стандартный кусок массива, который будем обрабатывать и остаток, который мог бы остаться необработанным, т.к. размер массива может быть некратен числу нитей. Этот остаток отдадим нулевой нити.
3. Далее в цикле запускаем нити, который будут менять свои куски.
4. Ну и смотрим кол-во замен (статическая переменная count) и сам получившийся массив.
класс Solution
класс ReplaceThread