n^2クリップスキーム

2055 ワード

中に入ると


これは2次元配列を作成した後,その数を増やすために選定した問題である.イメージコードだけを見ると間違いに違いない.私がそうするのは間違っているからです.行と列を利用する数字の中で最も大きいのは、配列された要素に入る問題です.
誤った解答.
    for(int i=n-1; i>=0; i--){
        for(int j=n-1; j>=0; j--){
            arr[i][j] = 0;
        }
    }

    for(int k=n-1; k>=0; k--){
        for(int i=n-1; i>=0; i--){
            for(int j=n-1; j>=0; j--){
                if(arr[i][j] == 0){
                    if(num == j || num == i){
                        arr[i][j] = num+1;
                    }
                }else{
                    continue;
                }
            }
        }
        num--;
    }
    
    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            arr2[num2] = arr[i][j];
            num2++;
        }
    }
    
    for(int i=left; i<=right; i++){
        answer.push_back(arr2[i]);
    }

    return answer;
}

コードの説明


答えベクトルの大きさは左右+1である.そんなに大きな値を返す必要があります.行はleft/nを列のright%nとして求め、その中の大きいものを答えに入れます.

コード#コード#

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int n, long long left, long long right) {
    int num = right - left + 1;

    vector<int> answer(num);
    for (int i = 0; i < num; i++, left++) {
        int row = left / n;
        int col = left % n;
        answer[i] = (row < col ? col : row) + 1;
    }
    
    return answer;
}