[力扣] 算法 74 (C++)

74. 搜索二维矩阵

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int row = matrix.size();
        int col = matrix[0].size();
        int left = 0, right = row * col - 1;
        while (left < right) {
            auto mid = (left + right) / 2;
            auto num = matrix[mid / col][mid % col];
            if (num == target) 
                return true;
            if (num < target)
                left = mid + 1;
            else
                right = mid - 1;
        }
        return matrix[left / col][left % col] == target;
    }
};

[力扣] 算法 190 (C++)

190. 颠倒二进制位

class Solution {
public:
    uint32_t reverseBits(uint32_t n) {
        auto ret = (n >> 16) | (n << 16);// ((ret & 0xffff0000) >> 16) | ((ret & 0x0000ffff) << 16)
        ret = ((ret & 0xff00ff00) >> 8) | ((ret & 0x00ff00ff) << 8);
        ret = ((ret & 0xf0f0f0f0) >> 4) | ((ret & 0x0f0f0f0f) << 4);// 1111 0000
        ret = ((ret & 0xcccccccc) >> 2) | ((ret & 0x33333333) << 2);// 1100 0011
        ret = ((ret & 0xaaaaaaaa) >> 1) | ((ret & 0x55555555) << 1);// 1010 0101
        return ret;
    }
};

[C] stdint.h

内含用typedef表示的各种类型。类型格式如下:

[u]int_[least/fast](8/16/32/64)_t

其中[]中的可填可不填,()中的内容必填。

举个例子:uint_least32_t表示无符号、长度至少32位的整型。

如果只想用可以存储最大数值的类型,请使用(int和max之间没有下划线):

[u]intmax_t

此外,该头文件还包含用宏表示的,上述类型可以存储的最大(小)值。只需要把对应类型全部变为大写,再根据需要把最后的T变为MIN/MAX即可。比如uint_least32_t能储存的最大值为UINT_LEAST32_MAX。

该头文件还有用于转换数字类型的宏:

[U]INT(8/16/32/64/MAX)_C(x)

其中x表示要转换的值(不要跟表示类型的符号)。

比如UINT32_C(45)可能会将45转换成45U。