Greedyアルゴリズム#2

15328 ワード

Sorting


JavaではArrayssort()関数を使用してarrayをソートできます.
public class ArrayTest {
    public static void main(String args[]){
        Integer[] arrayTest = {2,3,2,4,56,7,43,21};

        Arrays.sort(arrayTest, Collections.reverseOrder());

        for(int i : arrayTest){
            System.out.print(i + " ");
        }
    }
}
DESCソートしたいならパラメータ収集reverseOrder()を一緒に渡します.ArraysのパラメータはGeneric typeであり,intではなくIntegerとして宣言すべきである.


行->幅:縦長:行の長さ
列->デプス(Column->Depth):水平の長さ(Horizontal Length):列の長さ(Column Length)

2 D配列複写


ブログ参照
https://moon1226.tistory.com/31
Arrays.sort()の2番目のパラメータはComparatorを使用します.

だからComparatorを修理すればいいです.
public class SortTest {
    public static void main(String args[]) {
        int data[][] = {{4,3},{4,1},{1,2}};

        Arrays.sort(data, Comparator.comparingInt(num->num[0]));

        for(int i[] : data){
            for(int j : i){
                System.out.print(j + " ");
            }
            System.out.println("");
        }
    }
}
Comparator.Intの比較(num->num[0])=配列の0番目の要素に基づいて2 D配列を並べ替え、1の場合は1番目の要素に基づいて並べ替える

寄付問題#2


2 D配列を指定します.2 D配列行の最小数の最大数の問題を出力

Idea

2차원 배열이 주어진다.のアイデアの下で、2次元配列を宣言し、各行を並べ替えて最小値を抽出しようとした.そうしてもいいですが、複雑になります.解説にはもっと簡単な方法があります.

解説

public class GreedyCardGameOfNumberPage96 {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);

        // N, M을 공백을 기준으로 구분하여 입력 받기
        int n = sc.nextInt();
        int m = sc.nextInt();
        int result = 0;

        // 한 줄씩 입력 받아 확인하기
        for (int i = 0; i < n; i++) {
            // 현재 줄에서 '가장 작은 수' 찾기
            int min_value = 10001;
            for (int j = 0; j < m; j++) {
                int x = sc.nextInt();
                min_value = Math.min(min_value, x);
            }
            // '가장 작은 수'들 중에서 가장 큰 수 찾기
            result = Math.max(result, min_value);
        }

        System.out.println(result); // 최종 답안 출력
    }
}
最小値を見つけるだけなので、2 D配列を宣言する必要はありません.入力フェーズで見つけることもできます.Math関数を使用して最小値を探します.

寄付問題#3


numberとk入力を受け入れるには、2つの選択肢があります.numberをkで割って、kで割って続けます.そうしないと1を減らします.1までの実行回数は?
public class GreedyUntilOnePage99 {
    public static void main(String args[]) {

        int number=17;
        int count=0;
        int K=4;

        while(number !=1){
            if(number%K==0){
                number /= K;
            }else{
                number -= 1;
            }
            count++;
        }
        System.out.println(count);
    }
}
どうやって分けますか.%演算子があると思います.while loopは少し混同しており、if{count+}else{count+}、sonarLintは重複(count)を排除することを推奨している.