力扣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;
    }
};
相关推荐
纪元A梦几秒前
贪心算法应用:K-Means++初始化详解
算法·贪心算法·kmeans
_不会dp不改名_14 分钟前
leetcode_21 合并两个有序链表
算法·leetcode·链表
与己斗其乐无穷18 分钟前
C++学习记录(8)list
学习
mark-puls24 分钟前
C语言打印爱心
c语言·开发语言·算法
Python技术极客27 分钟前
将 Python 应用打包成 exe 软件,仅需一行代码搞定!
算法
有谁看见我的剑了?29 分钟前
k8s-容器探针和生命周期回调学习
学习·容器·kubernetes
吃着火锅x唱着歌34 分钟前
LeetCode 3302.字典序最小的合法序列
leetcode
睡不醒的kun40 分钟前
leetcode算法刷题的第三十四天
数据结构·c++·算法·leetcode·职场和发展·贪心算法·动态规划
吃着火锅x唱着歌42 分钟前
LeetCode 978.最长湍流子数组
数据结构·算法·leetcode
我星期八休息1 小时前
深入理解跳表(Skip List):原理、实现与应用
开发语言·数据结构·人工智能·python·算法·list