剑指offer----C语言版----第二天

news2024/10/6 6:02:47

目录

1. 二维数组中的查找

1.1 题目描述

1.1 思路一

1.2 思路二

1.3 思路三(最优解)


 

1. 二维数组中的查找

原题链接:剑指 Offer 04. 二维数组中的查找 - 力扣(LeetCode)https://leetcode.cn/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/submissions/

1.1 题目描述

给你一个N * M 的数组 他的每一行随下标的增长是升序,每一列随下标的增长也是升序,给定一个target,让你判断target在二维数组中是否存在。

1.1 思路一

直接两层for循环,暴力枚举。不推荐哈。

1.2 思路二

这种解法实属犯规哈,主要是想复习二分查找,就用了一下这种解法:对二维数组中的每一行或者每一列进行一次二分查找就可以啦。条件没有用完,不推荐这种解法哈。

bool findNumberIn2DArray(int** matrix, int matrixSize, int* matrixColSize, int target) {
    int i = 0;
    for (i = 0; i < matrixSize; i++)
    {
        int begin = 0;
        int end = *matrixColSize;
        while (begin < end)
        {
            int mid = begin + ((end - begin) >> 1);
            if (matrix[i][mid] < target)
            {
                begin = mid + 1;
            }
            else if (matrix[i][mid] > target)
            {
                end = mid;
            }
            else
            {
                return true;
            }
        }
    }
    return false;
}

 

1.3 思路三(最优解)

充分利用该二维数组的特性,因为下标越大,对应位置的数字也会越大。那么我们就可能会从数组中选取一个数字,当这个数字与target相等时,结束查找,这个数小于target时,那么就可能在他的右边或者下边,大于时就可能在他的上边或者左边。

 如上图我们要查找的范围就可以缩小到一定的区域,但是这样的话,下一次要对这两个区域查找,并且查找的位置还有重叠,问题就变得复杂了。

出现这种情路况的原因就是数的位置没有选对,我们不妨从选取右上角或者左下角的数字开始。下面就以开始选择右上角的数字为例来举例分析一波。先用文字分析,再用图分析哈。

对于下面这个二维数组

1        2        8        9

2        4        9        12

4        7        10      13

6        8        11      15

我们查找7这个数字

我们选取右上角的9,它大于7,则9这一列就不存在7这个数,更新要查找的范围:

1        2        8

2        4        9      

4        7        10    

6        8        11 

右上角的数字为8,它大于7,则8这一列就不存在7这个数,更新查找的范围:

1        2        

2        4            

4        7        

6        8 

右上角的数字2,小于7,则2这一行就不存在7这个数,更新查找的范围:

2        4            

4        7        

6        8 

右上角的数字4,小于7,则4这一行不存在7这个数,更新查找的范围:

4        7        

6        8 

右上角的数字7,okk咱就成功了!!!!

注意: 不乐意选取左上角和右下角的数字,因为左上角的数字该列都比他大,该行也比他大,不可以缩小查找的范围,右上角的同理。

bool findNumberIn2DArray(int** matrix, int matrixSize, int* matrixColSize, int target){
    if(matrix != NULL && matrixSize > 0 && *matrixColSize > 0)
    {
        int row = 0;
        int col = *matrixColSize - 1;
        while(row < matrixSize && col >=0)
        {
            if(matrix[row][col] > target)
            {
                col--;
            }
            else if(matrix[row][col] < target)
            {
                row++;
            }
            else
            {
                return true;
            }
        }
    }
    return false;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/125758.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WinServer 2012 域控组策略 用户发布软件部署

本例演示安装 Notepad 这款软件 因为域中发布软件只支持 msi 格式&#xff0c;所以要把 exe 转成 msi 格式&#xff0c;可以用这个软件 https://www.advancedinstaller.com/ 1、转换格式 &#xff08;1&#xff09;选择 MSI from EXE &#xff08;2&#xff09;定义项目名…

PLC实现十字路口交通灯的控制课程设计毕业设计

微信公众号&#xff1a;创享日记 对话框发送&#xff1a;plc十字路口 获取完整源码源程序文件 要求&#xff1a; 1、信号灯受启动及停止按钮的控制&#xff0c;当按下启动按钮时&#xff0c;信号灯系统开始工作&#xff0c;并周而复始地循环工作&#xff0c;当按下停止按钮时&…

【再学Tensorflow2】TensorFlow2的核心概念

TensorFlow2的核心概念Tensorflow中的张量常量张量变量张量Tensorflow中的计算图计算图介绍静态计算图动态计算图Autograph张量Tensor、图Graph、操作Operation、会话Session模型Model与层LayerTensorflow中的自动微分机制利用梯度磁带求导数利用梯度磁带和优化器求最小值参考资…

ArcGIS基础实验操作100例--实验13 数字化面图形的技巧

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验13 数字化面图形的技巧 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08…

Android 虚拟机 模拟器 设置梯子代理 for Mac

最近需要Android13的环境&#xff0c;想着刷机或者弄个模拟器。 本着效率优先的原则&#xff0c;现在本地机器上搞个Android模拟器。 打开AndroidStudio&#xff0c;在tool菜单 选择avd&#xff0c;安卓虚拟设备 根据本地电脑选择x86架构&#xff0c;MAC os 10.12&#xff0c…

虹科案例 | 监测各种材料液位居然如此轻松?

应用背景 1 天送达标准给公司带来了压力&#xff0c;要求他们比以往任何时候都更快、更高效地处理物品。对于依赖散装材料的行业尤其如此。例如&#xff1a; 农业 建造 塑胶成型 食品加工 许多这些行业通过将材料存放在箱子、罐或筒仓中来处理材料。为了正确地计…

麦克风采样率设置导致视频会议中声音采集异常问题分享

目录 1、问题描述 2、麦克风音频采集频率引发的声音采集异常 3、修改麦克风采集频率的详细说明 4、最后 这几年&#xff0c;大家已经习惯于使用视频会议软件&#xff08;比如免费的腾讯会议软件&#xff09;进行线上沟通与交流&#xff0c;通过摄像头将头像采集发送到会议中…

ARM专用指令

目录 一、状态寄存器传送指令:访问&#xff08;读写&#xff09;CPSR寄存器 ​编辑 二、软中断指令:触发软中断 三、协处理器指令:操控协处理器的指令 四、伪指令: 一、状态寄存器传送指令:访问&#xff08;读写&#xff09;CPSR寄存器 CPSR寄…

多线程的创建和使用(4种)

1.JDK5.0之前的创建方式 方式一&#xff1a;继承于Thread类 1.创建一个继承于Thread类的子类 2.重写Thread类的run() --> 此线程执行的作声明在run()中 3.创建Thread类的子类的对象 4.通过此对象调用start() 方式二&#xff1a;实现Runnable接口 1.创建一个实现了Runnable…

第三十五章 数论——卡特兰数

第三十五章 数论——卡特兰数一、什么是卡特兰数1、推导2、公式二、卡特兰数的应用1、问题&#xff1a;2、分析3、代码一、什么是卡特兰数 1、推导 我们看下面这个坐标系&#xff1a; 我们从(0,0)(0,0)(0,0)点到(6,6)(6,6)(6,6)点的路线有很多&#xff0c;并且根据我们高中排…

57.return—函数的返回值

57.return-函数的返回值 文章目录57.return-函数的返回值1.定义2.分类3. 没有返回值4.有1个返回值5.有多个返回值6.一个自定义函数只执行一次return语句7.实操练习1.定义 return关键字后接变量名或表达式可以将函数的计算结果返回到调用处。 变量或表达式等同于接收果汁、豆浆…

Chronicle Pro - 一款简单 Mac 理财规划师,管理你的的个人预算

Chronicle Pro - 一款简单 Mac 理财规划师&#xff0c;管理你的的个人预算 使用Chronicle追踪和支付账单&#xff0c;管理你的个人预算&#xff0c;这是一款简单的Mac理财规划师。获得通知&#xff0c;这样你就不会错过下一个付款截止日期;你再也不用付滞纳金了。把你所有的账单…

8 GUI实例

GUI 1 Frame 用来创建窗口&#xff0c;构造函数如下&#xff1a; public Frame() throws HeadlessExceptionpublic Frame(String title) throws HeadlessException 常用方法如下&#xff1a; public class gui_v1 {public static void main(String[] args) {Frame f new F…

用python的turtle库画一个小猪佩奇

小猪佩奇是一个可爱的小猪。她已经四岁了&#xff0c;与她的妈妈&#xff0c;爸爸&#xff0c;和弟弟乔治生活在一起。佩奇最喜欢做的事情是玩游戏&#xff0c;打扮的漂亮&#xff0c;度假&#xff0c;以及在小泥坑里快乐的跳上跳下和与小羊苏西&#xff08;她最好的朋友&#…

Nginx小结1

Nginx 是一个高性能的HTTP和反向代理web服务器&#xff0c;作为负载均衡器&#xff0c;承接的所有请求。核心功能有负载均衡、反向代理、静态资源服务器。另外Nginx还可以使用keepalive结合使用建立主备份机实现高可用。keepalive是在TCP中一个可以检测死连接的机制&#xff0c…

WordPress插件开发教程1:开发第一个WordPress插件

第一步&#xff1a;在 wp-content \ plugins 目录新建一个目录&#xff0c;随便起个名字&#xff0c;比如&#xff1a;my-first-plugin。 第二步&#xff1a;进入 my-first-plugin 目录&#xff0c;新建一个PHP文件&#xff0c;随便起个名字&#xff0c;比如&#xff1a;hello.…

UE解决SetActorHiddenInGame后其Collision仍然会被检测到的问题

文章目录 1.问题产生2.解决过程3.总结4.参考资料1.问题产生 (1)首先我在场景内添加了红色的球(Sphere)和绿色的面片(Plane),两者都是StaticMeshActor,如下图所示: (2)然后进入二者的静态网格体编辑窗口,将二者的碰撞复杂度都设置为UseComplexCollisionAsSimple。 …

D. Valiant‘s New Map(二分)

Problem - D - Codeforces 游戏工作室 "DbZ Games "想在他们的热门游戏 "Valiant "中引入另一张地图。这一次&#xff0c;名为 "Panvel "的地图将以孟买市为基础。 孟买可以被表示为nm的单元格。网格中的每个单元格&#xff08;i,j&#xff09;…

【数据可视化】地理信息可视化的常见算法

1. 地图投影 地理坐标&#xff1a;是用维度、经度表示地面点位置的球面坐标 移动开发&#xff1a;移动端依靠GPS获取位置信息&#xff0c;其获得的是经纬度的信息&#xff08;WGS84&#xff09; 互联网开发中&#xff0c;需要将WGS84转换为其他互联网地图平台支持的坐标系统…

QT 九宫格绘图(QSS方式)

什么是九宫格方式绘图&#xff1f; 顾名思义&#xff0c;就是把一个方块分割成 9 个部分&#xff0c;如图所示&#xff1a; 九宫格绘图的原理就是把背景图分割成 9 个部分&#xff0c;绘制时&#xff1a; 四个角&#xff08;1、3、7、9&#xff09;的大小不变左右部分&#…