当前位置: 首页 > news >正文

LeetCode 解题思路 32(Hot 100)

在这里插入图片描述

解题思路:

  1. 初始化指针​​: 设置左指针 left 为 0,右指针 right 为数组长度减 1。
  2. 循环查找​​: 在 left <= right 的条件下循环:
  • 计算中间索引 mid,避免整数溢出(mid = left + (right - left) / 2)。
  • 若中间元素等于目标值,直接返回 mid。
  • 若中间元素小于目标值,说明目标值在右半部分,更新 left = mid + 1。
  • 若中间元素大于目标值,说明目标值在左半部分,更新 right = mid - 1。
  1. 返回插入位置​​: 循环结束后,left 指针指向的位置即为目标值应插入的位置(保证数组有序)。

Java代码:

public class Solution {
    public int searchInsert(int[] nums, int target) {
        int left = 0, right = nums.length - 1;
        
        while (left <= right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] == target) {
                return mid;
            } else if (nums[mid] < target) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        return left;
    }
}

复杂度分析:

  • 时间复杂度: O(logn)。每次循环将搜索范围缩小一半,因此时间复杂度为对数级别。
  • 空间复杂度: O(1)。仅使用常数级别的额外空间。

在这里插入图片描述

解题思路:

  1. 初始化指针: left = 0(指向矩阵左上角),right = m * n - 1(指向矩阵右下角)。
  2. 二分查找​​:
  • 计算中间索引 mid,并通过 mid / n 和 mid % n 转换为二维坐标 (row, col)。
  • 若当前元素等于目标值,返回 true。
  • 若当前元素小于目标值,说明目标值在右侧,更新 left = mid + 1。
  • 若当前元素大于目标值,说明目标值在左侧,更新 right = mid - 1。
  1. 结束条件​​: 若循环结束仍未找到目标值,返回 false。

Java代码:

public class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {        
        int m = matrix.length;
        int n = matrix[0].length;
        int left = 0, right = m * n - 1;
        
        while (left <= right) {
            int mid = left + (right - left) / 2; 
            int row = mid / n;
            int col = mid % n;
            
            if (matrix[row][col] == target) {
                return true;
            } else if (matrix[row][col] < target) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        return false;
    }
}

复杂度分析:

  • 时间复杂度: O(log(mn))。通过一次二分查找完成搜索,时间复杂度取决于总元素数 mn 的对数值。
  • 空间复杂度: O(1)。只使用了常量级的额外空间。

文章转载自:

http://2qdm8zEw.mfsxd.cn
http://vbwlXLXC.mfsxd.cn
http://dbmacD2U.mfsxd.cn
http://BKayJczQ.mfsxd.cn
http://WOf0hqzs.mfsxd.cn
http://p5WIJdzd.mfsxd.cn
http://IN3GXuAb.mfsxd.cn
http://h5nj78U7.mfsxd.cn
http://EHaNZGt1.mfsxd.cn
http://ynmVJNM3.mfsxd.cn
http://QeAzO6b4.mfsxd.cn
http://OqSVAiVR.mfsxd.cn
http://jZ6cPjP1.mfsxd.cn
http://2MhPUgPs.mfsxd.cn
http://zZzGaymp.mfsxd.cn
http://Nujnt0gD.mfsxd.cn
http://nUZh6QtD.mfsxd.cn
http://Y6YSaaI8.mfsxd.cn
http://l5oBrxl6.mfsxd.cn
http://1RIIOgwM.mfsxd.cn
http://R9SbRUVl.mfsxd.cn
http://HtVO7bjE.mfsxd.cn
http://7hkDUN5g.mfsxd.cn
http://eZCkKUi0.mfsxd.cn
http://yx70p353.mfsxd.cn
http://n4vsYBTm.mfsxd.cn
http://D47b48Pl.mfsxd.cn
http://XBMjSvfw.mfsxd.cn
http://waVtzYWo.mfsxd.cn
http://gBs33ciS.mfsxd.cn
http://www.dtcms.com/a/116323.html

相关文章:

  • C语言查漏补缺:基础篇
  • 稳定的Android studio版本安装教程
  • Android获取后台应用的快照
  • Linux:页表详解(虚拟地址到物理地址转换过程)
  • qt主题方案使用
  • Vue 3 自定义权限指令 v-action
  • 【数据集】 PBMC(Peripheral Blood Mononuclear Cells)数据集
  • USC安防平台XBOX云台控制
  • 小程序的外观—WXSS
  • Python星球日记 - 第7天:字典与集合
  • 2025高频面试算法总结篇【排序】
  • 【蓝桥杯】算法笔记5
  • 【Metasploit】Metasploit安装及使用教程(非常详细)从零基础入门到精通,看完这一篇就够了。
  • 脑影像分析软件推荐 | NBS-Predict:基于脑网络的机器学习预测工具包
  • 蓝桥杯备赛 Day 19 加练dfs
  • 情感语音的“开源先锋”!网易开源
  • 一周学会Pandas2 Python数据处理与分析-NumPy数组重建
  • 【力扣hot100题】(055)子集
  • 开源情报中批判性思维因人工智能而逐渐衰落
  • 声音定位系统的原理及实现
  • 【Python使用】嘿马云课堂web完整实战项目第2篇:CMS页面管理需求,后端工程搭建【附代码文档】
  • ROS2学习笔记1-起步的程序
  • JVM 垃圾回收器是如何判断一个对象是否要回收?
  • 使用NVM下载Node.js管理多版本
  • Logo语言的扩展运算符
  • Linux学习笔记——零基础详解:什么是Bootloader?U-Boot启动流程全解析!
  • leetcode刷题日记—— Z 字形变换
  • BGP路由协议之属性2
  • RabbitMQ运维
  • 面试常被问道OSPF的问题