プログラマレベル1-5|アレイのコピーとソート


java.util.Arrays Classの学習


java.util.Arraysユーティリティクラスは、アレイのソート、コピー、リストへの変換などのタスクを容易にします.Arraysクラスのすべてのメソッドはクラスメソッド(static method)であり、オブジェクトを作成することなく使用できます.

copyOfRange(arr,n 1,n 2)メソッド

  • arr:この配列をコピーします.
  • n 1:index n 1から
  • n 2:index n 2より前の
  • sort(arr)法

  • arr:arrは昇順に並べられています.
  • 質問する


    配列のi番からj番までを切り取って並べ替えると、k番目の数字を求めようとします.
    例えばarrayが[1,5,2,6,3,7,4],i=2,j=5,k=3の場合
    arrayの2番目から5番目の場合は[5,2,6,3].
    1の配列を並べ替えると[2,3,5,6].
    2からの配列の3番目の数字は5です.
    配列配列、[i、j、k]を要素とする2次元配列コマンドをパラメータとして与える場合は、commandsのすべての要素に前述の演算を適用した結果を配列に戻してsolution関数を作成します.

    コード#コード#

    static int[] solution(int[] array, int[][] commands) {
      int[] answer = {};
      int[] arr = {};
    
      answer = new int[commands.length];
    
      for (int i = 0; i < commands.length; i++) {
    	int num = commands[i][1] - commands[i][0] + 1;
    	arr = new int[num];
    
    	int cnt = 0;
    	for (int j = commands[i][0] - 1; j < commands[i][1]; j++) {
    	  arr[cnt++] = array[j];
    	}
    
    	int temp = 0;
    	for (int j = 0; j < arr.length - 1; j++) {
    	  for (int y = j + 1; y < arr.length; y++) {
    	    if (arr[j] > arr[y]) {
    		temp = arr[j];
    		arr[j] = arr[y];
    		arr[y] = temp;
    	    }	// if end
    	  }	// for end
    	}	// for end
    
    	answer[i] = arr[commands[i][2] - 1];
      }
      return answer;
    }
    これは私が解いたもので、arraysクラスの方法で簡単に解くことができます.

    Arraysメソッドを使用したコード

    static int[] solution2(int[] array, int[][] commands) {
      int[] answer = {};
    
      answer = new int[commands.length];
    
      for (int i = 0; i < commands.length; i++) {
    	int[] temp = Arrays.copyOfRange(array, commands[i][0] - 1, commands[i][1]);
    	Arrays.sort(temp);
    	answer[i] = temp[commands[i][2] - 1];
      }
      return answer;
    }
    注1)https://norwayy.tistory.com/85
    注2)https://ifuwanna.tistory.com/232