目录
选择
编程
选择
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之后都要有一个循环出口,可以用元素的个数为条件,当元素个数超过矩阵中的元素个数的时候就退出循环。文章来源:https://www.toymoban.com/news/detail-704298.html
文章来源地址https://www.toymoban.com/news/detail-704298.html
核心代码
#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 ;
}
到了这里,关于数据结构 每日一练 :选择 + 编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!