1. 程式人生 > 實用技巧 >負載均衡--hash slot演算法

負載均衡--hash slot演算法

技術標籤:LeetCode每日一題

貪心:為了確保得到的值最大,陣列第一列必須是1,首先就可以對二維陣列的第一列不是1的記錄進行反轉,然後再處理列,每列中的1的個數大於一半,就進行反轉。這樣就能確保得到的值最大。
程式碼:
這是第一次過題程式碼,對二維陣列進行了反轉,其實不用,只需要求值就可以了。

class Solution {
    public int matrixScore(int[][] A) {
        int row = A.length, column = A[0].length;
        for (int i = 0; i < row; i++) {
if (A[i][0] == 0) { for (int j = 0; j < column; j++) { A[i][j] = 1 - A[i][j]; } } } for (int i = 1; i < column; i++) { int cnt = 0; for (int[] ints : A) { cnt += ints[
i]; } int rowCnt = row >> 1; if (cnt <= rowCnt) { for (int j = 0; j < row; j++) { A[j][i] = 1 - A[j][i]; } } } // 計算最後的值 int matrixScore = 0; for (int i = 0; i <
row; i++) { int num = 1, sum = 0; for (int j = column - 1; j >= 0; j--) { sum += num * A[i][j]; num <<= 1; } matrixScore += sum; } return matrixScore; } }

修改後的程式碼

class Solution {
    public int matrixScore(int[][] A) {
        int row = A.length, column = A[0].length;
        int matrixScore = 0;
        // 1 << (column - 1) 相當於2的column - 1次方
        matrixScore += row * (1 << (column - 1));
        for (int j = 1; j < column; j++) {
            int rowCnt = 0;
            // 計算這一列有多少個1
            // 因為沒有對陣列進行修改,這裡要判斷第一個數是否是1,是1不變,反之
            for (int i = 0; i < row; i++) {
                if (A[i][0] == 1) rowCnt += A[i][j];
                else rowCnt += 1 - A[i][j];
            }
            matrixScore += Math.max(rowCnt, row - rowCnt) * (1 << (column - j - 1));
        }
        return matrixScore;
    }
}