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;
    }
}
相关推荐
Sagittarius_A*13 小时前
深度学习预备知识:数据操作、线性代数与微积分基础
人工智能·深度学习·线性代数·ai
AI Chen16 小时前
【线性代数\矩阵论】最小二乘估计详解:普通最小二乘与加权最小二乘
线性代数·矩阵·最小二乘法
phoenix@Capricornus16 小时前
矩阵前乘&矩阵后乘
线性代数·矩阵
kingmax542120082 天前
高中数学教师资格面试试讲稿:《直线的位置关系(例2)》
线性代数·算法·面试·矩阵·教师资格
小妖6662 天前
力扣(LeetCode)- 74. 搜索二维矩阵
算法·leetcode·矩阵
Liangwei Lin2 天前
洛谷 U311289 矩阵距离
线性代数·算法·矩阵
不穿格子的程序员2 天前
从零开始写算法——矩阵类题:矩阵置零 + 螺旋矩阵
线性代数·算法·矩阵
一水鉴天2 天前
专题讨论 类型理论和范畴理论之间的关系 之2 整体设计中的“闭” 解题和“位”问题 (ima.copilot)
线性代数·矩阵·mvc
Tezign_space3 天前
技术实战:Crocs如何构建AI驱动的智能内容矩阵,实现内容播放量提升470%?
大数据·人工智能·矩阵·aigc·内容运营·多智能体系统·智能内容矩阵
serve the people3 天前
TensorFlow 中雅可比矩阵计算方式
人工智能·矩阵·tensorflow