力扣hot100学习记录(七)

240. 搜索二维矩阵 II

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

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

每列的元素从上到下升序排列。

题意

在二维矩阵中搜索是否存在一个目标值,该矩阵每一行每一列都是升序排列;
思路

从矩阵右上角开始判断,如果该点的值小于目标值,则这一行删除(因为该行其他值都小于该值),同理如果该点的值大于目标值,则这一列删除。以此来判断矩阵中是否存在目标值。
代码

cpp 复制代码
class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        if(matrix.empty()|| matrix[0].empty()) return false;
        int n = matrix.size(), m = matrix[0].size();
        int i = 0, j = m - 1;
        while(i < n && j >= 0){
            if(matrix[i][j] == target) return true;
            else if(matrix[i][j] > target) j--;
            else i++;
        }
        return false;
    }
};

160. 相交链表

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。

题意

给定两个单链表的头节点,找到两个单链表相交的起始节点。
思路

定义两个指针,分别从两个链表头开始搜索,如果搜到末尾(pA=null,则pA = headB),以此继续搜索,直到pA == pB,则为交点
代码

cpp 复制代码
class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        auto p = headA, q = headB;
        while(p != q){
            p = p ? p -> next : headB;
            q = q ? q -> next : headA;
        }
        return p;
    }
};
相关推荐
spcier5 小时前
图论拓扑排序-Kahn 算法
算法·图论
知星小度S5 小时前
动态规划(一)——思想入门
算法·动态规划
ysa0510305 小时前
动态规划-逆向
c++·笔记·算法
燃于AC之乐5 小时前
我的算法修炼之路--7—— 手撕多重背包、贪心+差分,DFS,从数学建模到路径DP
c++·算法·数学建模·深度优先·动态规划(多重背包)·贪心 + 差分
chinesegf5 小时前
文本嵌入模型的比较(一)
人工智能·算法·机器学习
We་ct6 小时前
LeetCode 6. Z 字形变换:两种解法深度解析与优化
前端·算法·leetcode·typescript
REDcker6 小时前
Redis容灾策略与哈希槽算法详解
redis·算法·哈希算法
嗯嗯=6 小时前
STM32单片机学习篇9
stm32·单片机·学习
福楠7 小时前
C++ STL | map、multimap
c语言·开发语言·数据结构·c++·算法
Sarvartha7 小时前
二分查找学习笔记
数据结构·c++·算法