Определение порядка статистики массива? Java - PullRequest
0 голосов
/ 14 апреля 2020

Извините, если форматирование плохое. Вопрос и код ниже. Я столкнулся с этой проблемой алгоритма массива, и я застрял на том, как ее решить. Я думал о сортировке массива, а затем итерации по нему, но я застрял. Любые указатели / решения для этого?

Напишите программу, которая, учитывая массив из N различных целых чисел и число K, будет определять статистику порядка K c массива. K является целым числом от 1 до N: 1 ≤ k ≤ n. K order statisti c - это K наименьшая запись в массиве. Таким образом, N order statisti c - это просто максимальное значение в наборе. Медиана, другими словами, средний элемент, это n / 2 order statisti c.

Input: первая строка ввода будет содержать порядок statisti c kk для определения. Вторая строка ввода будет содержать разделенный пробелами массив целых чисел, который будет использоваться для статистического набора. Например:

3

5 2 9 7

Выход: целое число, которое определяется как kk порядка статистики c данного массива. Например: 7

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Collections;
// k = low
// n = high
// median = n/2
// QuickSelect
public class Main {

  int low;
  int high;
  int[] arr; 

  public static int partition(int[] arr, int low, int high){
    int pivot = arr[high];
    pivotloc = low;

    for (int i = low; i <= high; i++){
      if(arr[i] < pivot){
        int temp = arr[i];
        arr[i] = arr[pivotloc];
        arr[pivotloc] = temp;
        temp++;
      }
    }
    int temp = arr[high];
    arr[high] = arr[pivotloc];
    arr[pivotloc] = temp;

    return temp;
  }
  public static int kSmallest(int k, int low, int high int[] arr){
  int partition = partition(arr,low,high);
    if (partition == k){
      return arr[partition];
    }
    else if (partition < k) {
      return kSmallest(arr, partition + 1, k);
    }
    else {
      return kSmallest(arr, low, partition - 1, k);
    }
  }     

  public static void main(String[] args) throws IOException {
    InputStreamReader reader = new InputStreamReader(System.in, StandardCharsets.UTF_8);
    BufferedReader in = new BufferedReader(reader);
    String line;
    while ((line = in.readLine()) != null) {
      System.out.println(line);
    }
    int[] array = new int[5, 2, 9, 7];
    int[] arraycopy = new int[5, 2, 9, 7];
    int kPosition = 3
    int length = array.lnegth;

    if (kPosition > length){
      System.out.println("Index out of bound");
    }else {
      System.out.println("Smallest element in array:" + kSmallest(arraycopy, 0, length - 1, kPosition-1));
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...