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;
    }
}
相关推荐
花间流风2 小时前
晏殊几何学讲义
算法·矩阵·几何学·情感分析
焦糖码奇朵、17 小时前
Matlab:矩阵运算篇——矩阵数学运算
人工智能·matlab·矩阵·信息与通信
从入门-到精通18 小时前
线性代数在机器学习中的理论与实践
人工智能·深度学习·神经网络·线性代数·决策树·机器学习·计算机视觉
痛&快乐着1 天前
线性代数之矩阵特征值与特征向量的数值求解方法
线性代数·矩阵
余~~185381628001 天前
碰一碰发视频系统之写卡功能开发了,支持OEM
线性代数·矩阵·音视频
被制作时长两年半的个人练习生1 天前
【算法】矩阵置零
线性代数·算法·矩阵
AI Chen1 天前
【统计至简】【入门测试1】给定数据矩阵X,如何求其质心、中心化数据、标准化数据、格拉姆矩阵、协方差矩阵、相关系数矩阵
线性代数·矩阵·统计至简
BingLin-Liu2 天前
蓝桥杯备考:动态规划路径类DP之矩阵的最小路径和
矩阵·蓝桥杯·动态规划
依旧阳光的老码农2 天前
03特征值分解
线性代数·矩阵
胡桃不是夹子2 天前
学会了蛇形矩阵
c++·算法·矩阵