LeetCodeの225回目のウィークリーゲーム(ランク1371/3851)

LeetCodeウィークリーコンテスト225

ここに画像の説明を挿入




質問1:5661。隠し番号を置き換えて取得した最新の時刻

ここに画像の説明を挿入


シミュレーション


ACコード

class Solution {
    
    
    public String maximumTime(String time) {
    
    
        char[] cs = time.toCharArray();
        char[] map = new char[]{
    
    '2','3', ':', '5','9'};
        int len = cs.length;
        for(int i = 0; i < len; i++) {
    
    
            if(cs[i] == '?') {
    
    
                if(i == 0) {
    
    
                    if(cs[i + 1] > '3' && cs[i + 1] != '?') cs[i] = '1';
                    else cs[i] = '2';
                } else {
    
    
                    if(i == 1 && cs[i - 1] != '2') cs[i] = '9';
                    else cs[i] = map[i];
                }
            }
        }
        
        return new String(cs);
    }
}



質問2:5662。3つの条件を満たすために変更する必要がある最小文字数

ここに画像の説明を挿入


質問の種類:NiukeプログラミングサミットS2ゲーム6-ブロンズ&シルバー&ゴールド質問2

一度に全部は期待していなかった。


aの最大文字数、26文字を列挙し、26回列挙します。タイプのすべての文字が最大文字数より小さく、bの文字数が最大文字数以上です。

同様に、bの最大文字、aとbの同じ文字を列挙します



ACコード

class Solution {
    
    
    public int minCharacters(String a, String b) {
    
    
        int alen = a.length(), blen = b.length();
        char[] csa = a.toCharArray(), csb = b.toCharArray();
        int ans = Integer.MAX_VALUE;
        for(int i = 0; i < 26; i++) {
    
    
            char cc = (char)('a' + i);
            
            int c = 0, d = 0, e = 0;
            for(int j = 0; j < alen; j++) {
    
    
                if (csa[j] < cc) c++;
                if (csa[j] > cc) d++;
                if (csa[j] != cc) e++;
            }
            
            for(int j = 0; j < blen; j++) {
    
    
                if (csb[j] >= cc) c++;
                if (csb[j] <= cc) d++;
                if (csb[j] != cc) e++;
            }
            
            ans = Math.min(ans, c);
            ans = Math.min(ans, d);
            ans = Math.min(ans, e);
        }        
        
        
        return ans;
    }
}



質問3:5663.K番目に大きいXOR座標値を見つけます

ここに画像の説明を挿入

レコードプレフィックスと

2次元-> 1次元のプレフィックスと配列

アイデア:

最初の行を初期化します

次に、現在の行と現在の列のXOR結果は次のようになります(前の行のXOR結果^この列に対する現在の行のXOR結果)

次に、並べ替え(小さいものから大きいものへ)すると、出力len-kはk番目に大きいXOR結果になります


ACコード

class Solution {
    
    
    public int kthLargestValue(int[][] m, int k) {
    
    
        int row = m.length, col = m[0].length;
        int[] pre = new int[row * col];
        // 初始化
        pre[0] = m[0][0];
        // 列
        for(int i = 1; i < col; i++) pre[i] = pre[i - 1] ^ m[0][i];
        
        for(int i = 1; i < row; i++) {
    
    
            int tmp = 0;
            for(int j = 0; j < col; j++) {
    
    
                tmp ^= m[i][j];
                pre[i * col + j] = pre[(i - 1) * col + j] ^ tmp;
            }
        }

        Arrays.sort(pre);
        // System.out.println(Arrays.toString(pre));
        int idx = row * col - k;

        return pre[idx];
    }
}



4番目の質問:5664。ボックスを配置します

ここに画像の説明を挿入


法律を見つける

いいえ、記入する


ACコード





おすすめ

転載: blog.csdn.net/qq_43765535/article/details/113083218