数据结构 每日一练 :选择 + 编程

2023-11-12

目录

选择

编程


选择

A .   a[0][2*1]     B.  a[1][3]   C.  a[4-2][0]  D.  a[0][2+2]

答案:D

解析:题目给的是一个3行4列的数组,而D选项是 a[0][2+2] = a[0][4],相当于取得是第1行第5列的元素,越界了。需要注意的是数组下表是从0开始的。下标从0开始!下标从0开始!下标从0开始!

A.  r - f           B.  r - f + 1        C.  ( r - f ) mod n + 1    D.   ( r - f + n ) mod n

答案:D

解析:注意本题的索引下标是从1开始 所以循环队列中最多有n个元素。在循环队列中,头指针指向队列当中的第一个元素,而尾指针指向最后一个元素的下一位。

队头指针为front,队尾指针为rear;队列中元素的最大个数MaxSize

入队时队尾指针加1取模:(rear+1)%MaxSize

出队时队头指针加1取模:(front+1)%MaxSize

队列长度(元素个数):(rear-front+MaxSize)%MaxSize

队满条件:(rear+1)%MaxSize==front

队空条件:front == rear

A.  1         B.  3       C.  4       D.  编译出错或其他地方不对

答案:D

解析:代码段中定义数组a方式错误,二维数组定义时不允许省略列数,无法编译通过。声明数组必须指定列!声明数组必须指定列!声明数组必须指定列!

A.  a[99-n]      B.  a[100-n]     C.  a[101-n]    D.  *(a + 101 - n)

答案:B

解析:数组元素的索引值从0开始,所以正数第n个元素的索引值是(n-1)。元素总数为100的数组倒数第n个元素的索引值是(100-n)。

A.  3              B.  4              C.  2                D.  5

答案:C

解析:二分查找即折半查找,mid = ( low + high ) / 2,且是向下取整的,第一次mid的指向32,然后high指向mid-1的位置;第二次mid指向15,正好与所要找的值相等。

编程

 题目:

给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。

数据范围:0≤n,m≤10,矩阵中任意元素都满足 ∣val∣≤100

要求:空间复杂度 O(nm) ,时间复杂度 O(nm)

思路:

        把矩阵看成一圈一圈的,每次循环遍历一个圈,每一圈的遍历中又分为上,右,下,左四个边界的遍历,每一个边界遍历完之后要向里层缩小。在遍历边界的时候要注意的是,每一个边的遍历必须是相同的规则,比如,下图中,上边界遍历从1开始,到倒数第二个元素3截止,遍历结束,即只遍历前三个元素,同样在其他的边进遍历的时候也是如此。这样才能保证所有的元素都会被遍历而且不会有重复。

        一轮控制一个变量,遍历上面一行时,变动列数;遍历右边一列时,变动行数;遍历下面一行时,变动列数;遍历左边一列时,变动行数。

        遍历一圈是4个for循环,但在一圈中的边界遍历的时候都有可能退出循环,所以每个for之后都要有一个循环出口,可以用元素的个数为条件,当元素个数超过矩阵中的元素个数的时候就退出循环。

    

核心代码

#include <stdio.h>
#include <stdlib.h>
int* spiralOrder(int** matrix, int matrixRowLen, int* matrixColLen, int* returnSize ) {
    int* a;  //定义一个新的数组
    int row=matrixRowLen;//数组的行数
    int col=*matrixColLen;//数组的列数
    int cnt=row * (col);  //数组的总的元素个数
    *returnSize=cnt;      // 定义返回数组的大小
    a=(int *)malloc(sizeof(int)* cnt); //为新的数组申请空间
    int up=0,down=row-1,right=col-1,left=0;//上边界,下边界,右边界,左边界
    int i=0,j=0,t=0;  //i表示行,j表示列,t表示数组a的元素个数

    while(1){  //循环一圈
        for(j=left;j<=right;j++){  //遍历上边界
            a[t++]=matrix[up][j];
        }
        if(t>=cnt){     //循环出口
            break;
        }
        up++;            //上边界下移
        for(i=up;i<=down;i++){    //遍历右边界
            a[t++]=matrix[i][right];
        }
        if (t>=cnt) {
            break;
        }
        right--;         //右边界左移
        for(j=right;j>=left;j--){  //遍历下边界
            a[t++]=matrix[down][j]; 
        }
        if(t>=cnt){
            break;
        }
        down--;   //下边界上移
        for(i=down;i>=up;i--){   //遍历左边界
            a[t++]=matrix[i][left];
        }
        if(t>=cnt){
            break;
        }
        left++;   //左边界右移
    }
    return a ;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构 每日一练 :选择 + 编程 的相关文章

随机推荐

  • 爬虫技术可以分析数据吗?

    目前在不少大数据团队中 数据分析和数据挖掘工程师通常都有明确的分工 数据采集往往并不是数据分析和挖掘工程师的任务 通常做爬虫的是大数据应用开发程序员或者是数据采集工程师 使用爬虫工具 的工作任务 但是对于数据分析工程师来说 掌握爬虫技术也是
  • 【RF时序预测】基于随机森林算法的时间序列预测附matlab代码

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 内容介绍 随机森林算法是一种集成学习方法 通过组合多个决策树来进行分类和回归 算法的原理如下
  • c++ 实现贪吃蛇(含技术难点解析和完整代码)

    文章目录 0 参考资料 1 技术难点 1 1 关于光标的移动 1 2 关于蛇的移动 1 2 1 从键盘上读取输入 1 2 2 蛇的移动 1 3 食物的生成 2 完整代码 0 参考资料 借鉴了这位大佬的博客及代码 在其基础上进行了修改 特此鸣
  • Antd Pro新增表格页面(二)

    前言 承接上一篇博客Ant Design Pro 新增一个表格页面 一 继续对index tsx进行修改 请求相关修改 复制过来的index tsx文件中的请求都是rule的增删查改 将其修改为前文已经写好的接口请求 import rule
  • VUE利用el-upload实现文件上传的功能,后端获取文件数据

    vue点击组件弹出窗口 span class tool btn i class table tool btn add icon i 批量新增 span 在方法中定义一个控制器 export default data return files
  • PTA---C++实现,定义抽象类Person、派生类Student和类Teacher

    问题描述 设计抽象类Person 派生出具体类 学生类Student和教师类Teacher 创建若干不同类对象后并在主方法中测试 数据成员定义 Person ID 姓名 生日 Student 专业 成绩 Teacher 职称 工资 带参构造
  • 贝叶斯定理及其Matlab程序设计

    目录 1 贝叶斯定理介绍 2 贝叶斯定理的Matlab代码实现 3 贝叶斯定理的C语言代码实现 4 贝叶斯定理的应用实例分析 1 贝叶斯定理介绍 贝叶斯定理 Bayes theorem 又称贝叶斯法则或贝氏定理 是概率论与统计学的基本定理之
  • OpenStack企业级实战

    一 环境初始化 1 CentOS7一键安装OpenStack 安装参考 Install RDO 前提条件 准备一个8g或16g内存的centos7 有一块网卡可以访问internet 磁盘 40G cpu分2 4线程 cpu要开启虚拟化 r
  • 串---KMP模式匹配算法之获取next数组

    一 获取模式串T的next数组值 1 回顾 我们所知道的KMP算法next数组的作用 next j 表示当前模式串T的j下标对目标串S的i值失配时 我们应该使用模式串的下标为next j 接着去和目标串失配的i值进行匹配 而KMP算法的ne
  • __attribute__((visibility("default")))

    设置符号可见性 vis c include
  • python创建可以迭代的类

    python中可以使用 for in 进行遍历 迭代 的数据类型 都是可迭代的对象 如 列表 字符串 字典 元组 都是可迭代的 Iterable 而浮点数 整型 布尔值都是不可迭代 for i in 1 2 3 4 print i for
  • NIO效率高的原理之零拷贝与直接内存映射

    前言 在笔者上一篇博客 详解了NIO 并总结NIO相比BIO的效率要高的三个原因 点击查看 这篇博客将针对第三个原因 进行更详细的讲解 首先澄清 零拷贝与内存直接映射并不是Java中独有的概念 并且这两个技术并不是等价的 零拷贝 零拷贝是指
  • python循环经典例题_Python学习之while循环练习题

    Python自近两年在国内兴起之后 引起了很多IT界小伙伴们的注意 开始学习Python的朋友逐渐增多 但是学习时发现 循环一处开始默默的考验逻辑思维了 还是再做几个练习题来梳理复习一下吧 1 使用while循环输出1 2 3 4 5 6
  • 51单片机汇编指令

    注 Rn与Ri中n 0 7 i 0 1 另外Cy是进位位 同时也是状态位 标志位 数据传送类指令 内部数据传送指令 助记符 作用 寻址方式 机器周期 字节数 MOV A Rn 将Rn的内容传送给A 寄存器 1 1 MOV A direct
  • java selenium (一) selenium 介绍

    Selenium 是目前用的最广泛的Web UI 自动化测试框架 本系列文章 将深入简出来讲解selenium 的用法 文章的末尾处 有整个系列的链接 阅读目录 selenium 的命名 selenium 的意思是 硒 有点QTP 杀手的意
  • java Canvas画图学习小结

    主函数 package paint import javax swing JFrame public class PaintMain JFrame jFrame public static void main String args TOD
  • 函数开始处的MOV EDI, EDI的作用收藏

    函数开始处的MOV EDI EDI的作用收藏 BYTE JMP 10 0x8b 0xFF 0x55 0x8b 0xEC 0xE9 0x00 0x40 0x00 0x00 0x00 Posted on 2009 04 01 11 19 S l
  • 数据增强方法--Cutout实现及结果分析

    数据增强方法 Cutout实现及结果分析 问题背景 Cutout简介 实现细节 实验设置 代码实现 结果展示 参考文献 问题背景 近年来 深度学习在计算机视觉领域取得了相当大的进展 并且在许多具有挑战性的任务中取得了最新的性能 如对象识别
  • 怎么样可以访问外部网络对于无公网IP的阿里云ESC服务器

    新购买了3台阿里云ECS服务器 centos7 和弹性公网IP EIP 虽然是从事计算机行业的人员但俺不是计算机网络从业人员 如何将这个祖宗运行起来 并且还要能方便远程维护 唉 其间的过程及酸爽各位看官尽情脑补吧 在此特别写几篇记录一下 算
  • 数据结构 每日一练 :选择 + 编程

    目录 选择 编程 选择 A a 0 2 1 B a 1 3 C a 4 2 0 D a 0 2 2 答案 D 解析 题目给的是一个3行4列的数组 而D选项是 a 0 2 2 a 0 4 相当于取得是第1行第5列的元素 越界了 需要注意的是数