0830饿了么Java笔试

1.很好理解,转过弯来就很好做,直接顺序遍历,找相邻不同值得个数就是答案,意思就是一遇到不相同得数就进行一次操作。
2.推导题,先把所有的列的异或和进行异或一下totalCol,然后行的也是totalRow,如果不相等就是NO,如果相等,先把第一列的所有第一个值赋值为每一行的异或和,再把每一列的第一个值赋值为每一列的异或和,最后左上角的值就是上面求到的所有列的异或和的异或和totalRow^a[0]^b[0],就行了,具体公式自行推导,java提交超时,用c++提交就过了。
3.盲猜1和2过了一部分
全部评论
java最后输出整个数组时每个数都print一次会超时,用stringbuilder拼好最后输出一次就可以过了
1 回复 分享
发布于 2024-08-30 21:10 山西

相关推荐

当你给STM32开发板通电或者按下复位键的那一刻,STM32内核(通常是Cortex-M系列)立即进入一个确定的状态。硬件复位逻辑强制程序计数器指向一个极其特殊的固定内存地址。对于大多数STM32,这个地址是0x00000000(或者根据BOOT引脚配置映射到其他存储区域的起始地址,例如内部Flash通常是0x08000000)这个地址存放的不是普通指令,而是整个启动流程的第一个关键要素——主堆栈指针的初始值。内核做的第一件事就是读取这个值并初始化MSP寄存器,为后续的函数调用和中断处理建立好堆栈基础。紧接着,内核会读取紧邻的下一个地址(0x00000004)的内容,这个位置存放的是复位向量的地址,也就是复位处理函数的入口点。内核将这个地址加载到程序计数器PC中,至此,硬件自动执行的步骤完成,程序跳转到了软件定义的复位处理函数开始执行。复位处理函数通常由芯片厂商在启动文件中用汇编语言编写(例如startup_stm32fxxxxx.s中的Reset_Handler)。这个函数是启动流程的核心协调者。它的首要任务是调用SystemInit()函数。这个函数由ST的HAL库或标准外设库提供,负责对芯片至关重要的系统级硬件进行初始化。其核心工作包括配置内部时钟源、设置PLL倍频器以将时钟提升到芯片运行所需的高频率、初始化外部高速时钟(如果使用的话)、配置Flash访问等待状态(因为Flash速度通常跟不上内核全速运行)、以及设置关键的系统控制寄存器如SCB->VTOR以正确指向中断向量表的位置。这一步确保了内核和主要总线拥有正确且稳定的时钟信号,是后续所有操作能够正确执行的基础保障。完成关键的时钟和基本系统配置后,启动流程进入一个容易被忽视但极其重要的阶段——由编译器运行时环境负责的数据初始化。复位处理函数接下来会跳转到一个通常名为__main的入口点(这是ARM编译器工具链的约定,其他工具链如GCC可能有类似_start的机制)。__main并非用户编写的main函数,而是编译器提供的库函数。它的核心职责是处理C语言运行环境。这包括:将存储在Flash中的初始化值(.data段)复制到对应的SRAM位置,确保全局变量和静态变量拥有正确的初始值;将未初始化的全局变量和静态变量所在的内存区域(.bss段)清零,防止出现随机值;如果使用了C++,还会执行全局对象的构造函数。这些操作是C/C++程序能够正确运行的前提条件,没有它们,全局变量将处于不确定状态。当所有的底层硬件初始化、运行时环境设置和数据准备就绪后,__main函数最终会调用用户编写的应用程序入口——main()函数,此时进入main函数执行。
点赞 评论 收藏
分享
评论
5
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务