[c语言日寄]在不完全递增序中查找特定要素

【作者主页】siy2333
【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是进阶开发者,这里都能满足你的需求!
【食用方法】1.根据题目自行尝试 2.查看基础思路完善题解 3.学习拓展算法
【Gitee链接】资源保存在我的Gitee仓库:https://gitee.com/siy2333/study
文章目录
- 前言
- 一、题目引入
- 不完全递增矩阵
- 问题描述
- 二、知识点分析
- 三、解法实现与分析
- 1. 暴力搜索
- 2. 逐行二分查找
- 四、总结
前言
查找类问题是一个非常常见的任务。无论是从简单的数组中查找一个特定的数字,还是从复杂的数据结构中检索信息,查找算法的效率和正确性都十分重要。今天,我们将探讨一个有趣的查找问题:在不完全递增序的矩阵中查找特定的元素。
一、题目引入
不完全递增矩阵
假设我们有一个二维矩阵,矩阵的每一行从左到右是递增的,但列与列之间并没有严格的递增关系。这种矩阵被称为“不完全递增序矩阵”。
例如,以下矩阵满足这一条件
1 3 5 7 2 4 6 8 10 11 12 13 9 14 15 16
在这个矩阵中,每一行都是递增的,但列与列之间并不完全递增。
问题描述
给定一个不完全递增序的矩阵和一个目标数字,编写一个程序来判断该数字是否存在于矩阵中。
假设矩阵如下,而且目标数字为 12:
| 1 | 3 | 5 | 7 |
|---|---|---|---|
| 2 | 4 | 6 | 8 |
| 10 | 11 | 12 | 13 |
| 9 | 14 | 15 | 16 |
此时,程序返回 true。
二、知识点分析
- 矩阵的特性
矩阵的每一行从左到右是递增的,这意味着我们可以利用这一特性来优化查找算法。虽然列与列之间没有严格的递增关系,但行的递增性仍然可以为我们提供一些线索。我们在接下来的文章中会利用这一点解题。 - 查找算法
在完全有序的矩阵中,我们可以从右上角或左下角开始查找,利用矩阵的有序性逐步缩小搜索范围(例如二分查找)。然而,在不完全递增序的矩阵中,这种方法不再适用。我们需要寻找一种新的策略来优化查找过程。 - 时间复杂度
对于一个 M×N 的矩阵,暴力搜索的时间复杂度为 O(M×N)。
三、解法实现与分析
1. 暴力搜索
最简单的查找方法是暴力搜索,即遍历矩阵的每一个元素,检查是否等于目标值。这种方法的时间复杂度为 O(M×N),效率较低。
#include <stdio.h>
#include <stdbool.h>#define M 4
#define N 4//暴力查找函数
bool find_brute_force(int matrix[M][N], int target) {for (int i = 0; i < M; i++) {for (int j = 0; j < N; j++) {if (matrix[i][j] == target) {return true;}}}return false;
}
//主函数
int main() {//定义数组int matrix[M][N] = {{1, 3, 5, 7},{2, 4, 6, 8},{10, 11, 12, 13},{9, 14, 15, 16}};int target = 12;//查找与输出if (find_brute_force(matrix, target)) {printf("Target %d found in the matrix.\n", target);} else {printf("Target %d not found in the matrix.\n", target);}return 0;
}
运行结果如下:

2. 逐行二分查找
虽然矩阵的列没有严格的递增关系,但每一行的递增性可以被利用。我们可以对每一行进行二分查找。这种方法的时间复杂度为 O(MlogN)。
#include <stdio.h>
#include <stdbool.h>#define M 4
#define N 4bool binary_search(int arr[], int target) {int left = 0, right = N - 1;while (left <= right) {int mid = left + (right - left) / 2;if (arr[mid] == target) {return true;} else if (arr[mid] < target) {left = mid + 1;} else {right = mid - 1;}}return false;
}bool find_row_wise(int matrix[M][N], int target) {for (int i = 0; i < M; i++) {if (binary_search(matrix[i], target)) {return true;}}return false;
}int main() {int matrix[M][N] = {{1, 3, 5, 7},{2, 4, 6, 8},{10, 11, 12, 13},{9, 14, 15, 16}};int target = 12;if (find_row_wise(matrix, target)) {printf("Target %d found in the matrix.\n", target);} else {printf("Target %d not found in the matrix.\n", target);}return 0;
}
运行结果如下:

四、总结
通过分析条件的特性,选择合适的查找算法和数据结构,是程序员的重要素质。对于这道题,即不完全递增序的矩阵,逐行二分查找是一种有效的优化策略。
关注窝,每三天至少更新一篇优质c语言题目详解~
[专栏链接QwQ] :⌈c语言日寄⌋CSDN
[关注博主ava]:siy2333
感谢观看~ 我们下次再见!!
相关文章:
[c语言日寄]在不完全递增序中查找特定要素
【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是…...
HtmlRAG:RAG系统中,HTML比纯文本效果更好
HtmlRAG 方法通过使用 HTML 而不是纯文本来增强 RAG 系统中的知识表示能力。通过 HTML 清洗和两步块树修剪方法,在保持关键信息的同时缩短了 HTML 文档的长度。这种方法优于现有基于纯文本的RAG的性能。 方法 其实主要看下围绕html提纯思路,将提纯后的…...
LeetCode题解:2690. 无穷方法对象,Proxy
Problem: 2690. 无穷方法对象 思路 这个问题的核心在于创建一个对象,该对象能够响应对其任何方法的调用,并返回调用的方法名称。为了实现这一点,我们可以利用 JavaScript 中的 Proxy 对象。Proxy 对象允许我们自定义对象的基本操作ÿ…...
在WPS中通过JavaScript宏(JSA)调用本地DeepSeek API优化文档教程
既然我们已经在本地部署了DeepSeek,肯定希望能够利用本地的模型对自己软件开发、办公文档进行优化使用,接下来就先在WPS中通过JavaScript宏(JSA)调用本地DeepSeek API优化文档的教程奉上。 前提: (1)已经部署好了DeepSeek,可以看我的文章:个人windows电脑上安装DeepSe…...
2023-arXiv-CoT Prompt 思维链提示提升大型语言模型的推理能力
arXiv | https://arxiv.org/abs/2201.11903 摘要: 我们探讨了如何生成思维链(一系列中间推理步骤)显著提高大型语言模型执行复杂推理的能力。在三个大型语言模型上的实验表明,思维链提示提高了一系列算术、常识和符号推理任务的性…...
程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<10>
大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。 今天我们继续来复习指针… 目录 一、看一段代码二、 一维数组传参的本质三、冒泡排序3.1 基本思想四、二…...
如何在MacOS上查看edge/chrome的扩展源码
步骤 进入管理扩展页面点击详细信息复制对应id在命令行键入 open ~/Library/Application Support/Microsoft Edge/Default/Extensions/${你刚刚复制的id} 即可打开访达中对应的更目录 注意 由于原生命令行无法直接处理空格 ,所以需要加转义符\,即:open ~/Librar…...
C++病毒(^_^|)(2)
第二期 声明: 仅供损害电脑,不得用于非法。损坏电脑,作者一律不负责。此作为作者原创,转载请经过同意。 直接上代码 #include <bits/stdc.h> #include <windows.h> using namespace std; HHOOK g_hHook;void lrud(…...
CNN|ResNet-50
导入数据 import matplotlib.pyplot as plt # 支持中文 plt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] False # 用来正常显示负号import os,PIL,pathlib import numpy as npfrom tensorflow import keras from tensor…...
Java堆外内存的高效利用与性能优化
在Java开发中,堆外内存(Direct Memory)是除Java堆以外的内存区域。它允许Java程序直接分配和管理非堆内存,这为高性能的数据处理提供了可能。 1、 什么是堆外内存? 堆外内存,也称为直接内存(D…...
吉祥汽车泰国首发,用 Unity 实现行业首创全 3D 座舱虚拟世界
11 月 19 日,均瑶集团吉祥智驱(以下简称“吉祥汽车”)首款纯电动汽车 JY AIR 在泰国首发。延续吉祥航空在飞行体验上的优势,吉祥汽车对 JY AIR 赋予了将航空级服务标准延伸至地面的使命,为用户提供一站式大出行体验。此…...
【OpenCV】双目相机计算深度图和点云
双目相机计算深度图的基本原理是通过两台相机从不同角度拍摄同一场景,然后利用视差来计算物体的距离。本文的Python实现示例,使用OpenCV库来处理图像和计算深度图。 1、数据集介绍 Mobile stereo datasets由Pan Guanghan、Sun Tiansheng、Toby Weed和D…...
Uniapp 原生组件层级过高问题及解决方案
文章目录 一、引言🏅二、问题描述📌三、问题原因❓四、解决方案💯4.1 使用 cover-view 和 cover-image4.2 使用 subNVue 子窗体4.3 动态隐藏原生组件4.4 使用 v-if 或 v-show 控制组件显示4.5 使用 position: fixed 布局 五、总结Ἰ…...
iOS实现生物识别
1. info.plist中添加权限申请 <key>NSFaceIDUsageDescription</key> <string>APP would like to use Face ID</string> <key>NSBiometricUsageDescription</key> <string>APP would like to use Touch ID</string>2. 添加库 …...
React 初级教程
一、React 简介 React 是由 Facebook 开发的开源 JavaScript 库,用于构建用户界面(UI)。特点: 声明式编程:通过描述 UI 应该是什么样子(而不是操作 DOM)来构建界面。组件化:将 UI 拆分为独立可复用的组件。跨平台:支持 Web(React)、移动端(React Native)、VR 等。…...
【数据结构初阶第十节】队列(详解+附源码)
好久不见。。。别不开心了,听听喜欢的歌吧 必须有为成功付出代价的决心,然后想办法付出这个代价。云边有个稻草人-CSDN博客 目录 一、概念和结构 二、队列的实现 Queue.h Queue.c test.c Relaxing Time! ————————————《有没…...
萌新学 Python 之列表 list
list 列表:用中括号定义,元素写在中括号之间,元素之间使用逗号分隔 list1 [] # 空列表 list2 [1] # 元素为1个 list3 [a, b, c] print(type(list1), type(list2), type(list3)) # <class list> <class list> <class …...
250213-RHEL8.8-外接SSD固态硬盘
It seems that the exfat-utils package is still unavailable, even after enabling the RPM Fusion repository. This could happen if the repository metadata hasn’t been updated or if the package isn’t directly available in the RPM Fusion repository for RHEL 8…...
游戏引擎学习第99天
仓库:https://gitee.com/mrxiao_com/2d_game_2 黑板:制作一些光场(Light Field) 当前的目标是为游戏添加光照系统,并已完成了法线映射(normal maps)的管道,但还没有创建可以供这些正常映射采样的光场。为了继续推进&…...
Linux初始化 配置yum源
问题出现:(报错) 1 切换路径 2 备份需要操作的文件夹 3 更改 CentOS 的 YUM 仓库配置文件,以便使用阿里云的镜像源。 4 清除旧的yum缓存 5 关闭防火墙 6 生成新的yum缓存 7 更新系统软件包 8 安装软件包...
【笛卡尔树】
笛卡尔树 笛卡尔树定义构建性质 习题P6453 [COCI 2008/2009 #4] PERIODNICF1913D Array CollapseP4755 Beautiful Pair[ARC186B] Typical Permutation Descriptor 笛卡尔树 定义 笛卡尔树是一种二叉树,每一个节点由一个键值二元组 ( k , w ) (k,w) (k,w) 构成。要…...
Ubuntu启动geteck/jetlinks实战:Docker启动(无法登录)
参考: JetLinks 物联网基础平台 安装Docker Ubuntu下载安装Docker-Desktop-CSDN博客 sudo apt install -y docker-compose 下载源码 git clone https://github.com/jetlinks/jetlinks-community.git cd jetlinks-community 启动 cd docker/run-all sudo dock…...
Java String 类深度解析:内存模型、常量池与核心机制
目录 一、String初识 1. 字符串字面量的处理流程 (1) 编译阶段 (2) 类加载阶段 (3) 运行时阶段 2. 示例验证 示例 1:字面量直接赋值 示例 2:使用 new 创建字符串 示例 3:显式调用 intern() 注意点1: ⑴. String s1 &q…...
不到一个月,SQLite 3.49.0来了
距离 SQLite 3.48.0 发布不到一个月,SQLite 开发团队于 2025 年 2 月 6 日发布了 SQLite 3.49.0 版本。这更新速度的确让人感动,那么这个版本又有哪些更新呢? 查询优化器 新版本改进了自动索引(query-time index)优化…...
探索顶级汽车软件解决方案:驱动行业变革的关键力量
在本文中,将一同探索当今塑造汽车行业的最具影响力的软件解决方案。从设计到制造,软件正彻底改变车辆的制造与维护方式。让我们深入了解这个充满活力领域中的关键技术。 设计软件:创新车型的孕育摇篮 车辆设计软件对于创造创新型汽车模型至…...
ThreadPoolExecutor 详解
一、ThreadPoolExecutor 核心参数 构造函数如下: public ThreadPoolExecutor(int corePoolSize, // 核心线程数int maximumPoolSize, // 最大线程数long keepAliveTime, // 非核心线程空闲存活时间TimeUnit unit, // 存活时间单位BlockingQueue…...
TikTok走红全球:中国短视频平台以全新姿态登陆海外市场
在数字化浪潮中,短视频已经成为全球年轻人表达自我、分享生活的重要方式。TikTok,这个起源于中国的短视频平台,以其独特的魅力和创新的功能在全球范围内迅速走红。本文将探讨TikTok如何以全新姿态登陆海外市场,并分析其成功的关键…...
Qt的QTableWidget样式设置
在 Qt 中,可以通过样式表(QSS)为 QTableWidget 设置各种样式。以下是一些常见的样式设置示例: 1. 基本样式设置 tableWidget->setStyleSheet(// 表格整体样式"QTableWidget {"" background-color: #F0F0F0;…...
计算机毕业设计Python旅游评论情感分析 NLP情感分析 LDA主题分析 bayes分类 旅游爬虫 旅游景点评论爬虫 机器学习 深度学习
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
渗透测试扫描器全解析:分类与介绍
目录 前言 操作系统扫描器:系统漏洞的 “侦察兵” 特点 代表性工具 网站 Web 漏洞扫描器:Web 应用的 “安全卫士” 特点 代表性工具 手机漏洞扫描器:移动设备的 “安全护盾” 特点 代表性工具 前言 在数字技术飞速发展的当下&…...
