LeetCode 热题 100(四):48. 旋转图像、240. 搜索二维矩阵 II、234. 回文链表

一.48. 旋转图像

题目要求:就是一个顺时针的旋转过程。

思路:观察矩阵,得出翻转前第i行的第J个元素 等于 翻转后倒数第i列的第J个元素,举例说明,第1行第2个元素为"2",翻转后到了 倒数第1列的第2个元素。说白了只需要针对翻转前的第i行和翻转后的倒数第i列

代码:

java 复制代码
class Solution {
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        int[][] matrix_new = new int[n][n];
        // 按照思路对新矩阵存值
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                matrix_new[j][n - i - 1] = matrix[i][j];
            }
        }

        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                matrix[i][j] = matrix_new[i][j];
            }
        }
    }
}

二.240. 搜索二维矩阵 II

题目要求:编写一个高效的算法来搜索 m xn 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:

  • 每行的元素从左到右升序排列。
  • 每列的元素从上到下升序排列

思路:这个题可以直接使用双层for循环暴力破解; 也可以使用二分查找

代码:

java 复制代码
class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        for (int[] row : matrix) {
            int a = search(row, target);
            // 务必注意这里只要找到了就直接return true 而不是找不到return false
            if (a >= 0)
                return true;
        }
        return false;
    }
    
// 二分查找即可
    public int search(int[] nums, int target){
        int l = 0;
        int r = nums.length - 1;
        while (l <= r){
            int mid = l +((r - l) >> 1);
            if (nums[mid] > target)
                r = mid - 1;
            else if (nums[mid] < target)
                l = mid + 1;
            else
                return mid;
        }
        return -1;
    }
}

三、234. 回文链表

题目要求:

思路:因为链表无法使用双指针做,所以先将链表的值复制到数组中,然后使用双指针进行判断。

代码:

java 复制代码
class Solution {
    public boolean isPalindrome(ListNode head) {
        // 将链表的值复制到数组中
        List<Integer> vals = new ArrayList<Integer>();
        ListNode cur = head;
        while (cur != null){
            vals.add(cur.val);
            cur = cur.next;
        }

        // 双指针判断是否回文
        int l = 0;
        int r = vals.size() - 1;
        while (l < r){
            if (vals.get(l) != vals.get(r))
                return false;
            l++;
            r--;
        }
        return true;
    }
}
相关推荐
盛寒5 小时前
向量与向量组的线性相关性 线性代数
线性代数·算法
灰灰的C旅程12 小时前
详细理解向量叉积
线性代数
ComputerInBook13 小时前
矩阵之方阵与行列式的关系
线性代数·矩阵·行列式·线性变换·方阵的行列式
The_Killer.17 小时前
格密码--数学基础--06对偶空间与对偶格
学习·线性代数·密码学
passxgx1 天前
9.2 埃尔米特矩阵和酉矩阵
线性代数·矩阵
盛寒1 天前
等价矩阵和等价向量组
线性代数·算法·矩阵
WoShop商城源码1 天前
短视频矩阵系统的崛起:批量发布功能与多平台矩阵的未来
人工智能·线性代数·其他·矩阵
dongzhenmao1 天前
P1484 种树,特殊情形下的 WQS 二分转化。
数据结构·c++·windows·线性代数·算法·数学建模·动态规划
mit6.8242 天前
矩阵 | 时域频域傅里叶变换
线性代数·矩阵
The_Killer.2 天前
格密码--数学基础--02基变换、幺模矩阵与 Hermite 标准形
线性代数·矩阵·密码学