关注下方公众号,分享硬核知识

作者 | 小K

出品 | 公众号:小K算法 (ID:xiaok365)

01

故事起源

有这样的一种矩阵,从左上角开始,顺时针从外向里旋转,数字依次递增,如果给定任意行n、列m,请问如何输出这样的矩阵呢?

02

分析

这个问题第一眼就觉得很简单,为啥呢,因为规律很明显,问题描述都已经说的很清晰了,只要按照要求模拟一遍就行了。
如果现在让你把这个问题描述给其他人,你是不是也会这样来描述:一直向前走,无路可走向右转。。。

03

模拟

啥是模拟呢,模拟就是按照你的想法,机械的执行命令就可以了,没有啥算法可言,就像这个问题一样。

不过机器并不能听懂你的高级语言,所以需要翻译一下。

说机话
整个过程拆解为4个步骤:
从矩阵左上角开始向右直到边界;2)向下;3)向左;4)向上。
重复上面4个步骤,直到填满整个矩阵。

于是我们就得到了初步的框架:

while (还没填满) {// 向右直到边界j++;// 向下直到边界i++;// 向左直到边界j--;// 向上直到边界i--;
}

04

细节

从左向右,结束时j超出边界,需要j--。最上一行已填满,上边界下移,同时i也下移。

从上向下,结束时i超出边界,需要i--。最右一列已填满,右边界左移,同时j也左移。

其余2个过程同理。

05

代码实现

#define ROW 5
#define COLUMN 5
void main() {int left = 0, right = COLUMN - 1, top = 0, bottom = ROW - 1;int f[ROW][COLUMN], i = 0, j = 0, num = 1;while (i >= top && i <= bottom && j >= left && j <= right) {// left->rightwhile (j <= right) {f[i][j++] = num++;}j--;top++;i++;// top->bottomwhile (i <= bottom) {f[i++][j] = num++;}i--;right--;j--;// right->leftwhile (j >= left) {f[i][j--] = num++;}j++;bottom--;i--;// bottom->topwhile (i >= top) {f[i--][j] = num++;}i++;left++;j++;}
}

06

总结

模拟问题一般都比较简单,只需要把整个框架过程抽象出来,然后机械的实现即可。但偶尔也会遇到复杂的模拟,一般都是细节涉及的比较多,比如边界信息太多,或者过程太多等。不过这种问题很适合锻炼代码实现能力,多做就能达到“有思想就一定能实现”的状态。

本文原创作者:小K,一个思维独特的写手。
文章首发平台:微信公众号【小K算法】。

如果喜欢小K的文章,请点个关注,分享给更多的人,小K将持续更新,谢谢啦!

关注下方公众号,分享硬核知识

关注我,涨知识

原创不易,感谢分享

转发,点赞,在看

往期精彩回顾

一种比线段树还高效的区间算法

第一次拆Macbook,手有点抖...

一个简单的求和问题,却难住了很多人

分享给更多朋友,转发,点赞,在看

面试出现频率超高的一道算法题相关推荐

  1. Homebrew作者面试Google被拒,只因写不出一道算法题

    相信很多人听说过关于Max Howell(Homebrew的作者)的故事: Max Howell在Google面试,但Google拒绝了他,给出的答复是:"虽然我们90%的工程师都用你写的软 ...

  2. 一天一道算法题--5.30---递归

    感谢微信平台:  一天一道算法题 --------每天多一点进步--------- 今天 休假 这题 也很水 能发现 规律就好 明天 再也不能这样了 forgive me ---------- 转载于 ...

  3. 一天一道算法题--6.15--卡特兰数

    感谢微信平台---一天一道算法题---每天多一点进步- problem: 12个高矮不同的人 排成两排 每排必须是从矮到高排列 而且第二行比对应的第一排的人高 问排列方式有多少种? analyse: ...

  4. 一道算法题跟大家分享

    无意中看到一道算法题,拿出我的解法与大家分享. 题目:输出1,2,3,4四个数字能组成的互不相同且无重复的三位数并统计满足条件的三位数个数 大家先想想,再看答案吧. View Code 1 /// & ...

  5. 每天一道算法题系列十七之电话号码的字母组合

    每天一道算法题系列: 来源:力扣(LeetCode) 本题链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-numb ...

  6. 搜狗2020秋招笔试的一道算法题

    搜狗2020秋招的一道算法题 有A,B,C三种样品,凑齐三个样品各一个就可以领取一个奖品.任意两个样品可兑换另一种样品,如AA可兑换一个B或一个C,AB可兑换一个C.输入ABC,问最多可以领取多少奖品 ...

  7. 每天一道算法题系列十二之整数转罗马数字

    每天一道算法题系列: 来源:力扣(LeetCode) 本题链接:https://leetcode-cn.com/problems/integer-to-roman/ 来源是力扣,大家喜欢可以去力扣中文 ...

  8. 截止目前为止,我遇到的最难的一道算法题:计算相邻两个数的最大差值

    hello,今天给大家带来一道算法题.这道算法题,是我目前为止,见过最难的一道题.那么到底是怎样的一道算法题呢?如下: 题目:给定一个数组, 求如果排序之后, 相邻两数的最大差值. 要求时间复杂度O( ...

  9. 字节面试必须拿下的十道算法题,你会几道?

    前言 大家好,我是bigsai. 最近不少小伙伴跟我交流刷题肿么刷,我给的建议就是先剑指offer和力扣hot100,在这些题中还有些重要程度和出现频率是非常非常高的,今天给大家分享当今出现频率最高的 ...

  10. 面试官问出这几道算法题,你能扛住么?

    写在前面 CSDN话题挑战赛第1期 活动详情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f 参赛话题:前端面试宝典 话 ...

最新文章

  1. 深入理解并行编程-分割和同步设计(一)
  2. 接班 RT 系统?Windows 10 云服务版首次亮相
  3. 科研助力 | 牛津,MIT导师计算机科研项目招生(仅限AI,机器学习,深度学习方向)...
  4. 10-5 5-5 查询只卖三种不同型号PC的厂商 (20 分)
  5. 录制电脑屏幕的软件_电脑屏幕录制操作方法,太实用了!
  6. 性能比拼!超详细的Tengine GEMM矩阵乘法汇编教程
  7. webpack4搭建vue
  8. mysql 优化器_mysql之优化器、执行计划、简单优化
  9. 关于socket中阻塞,非阻塞,同步,异步的概念
  10. 自己做的小游戏希望大家能喜欢
  11. 五分钟就能上手的Android APP开发入门教程!!!
  12. 深入浅出hibernate_夏昕_hibernate对储存过程的处理
  13. 沪江快速手机打字软件下载
  14. 控制服务器系统,控制服务器操作系统
  15. 记录一些 arm64指令的用法
  16. 【网易编程题】小易魔法王国采购魔法神器
  17. kafka 四:(设计模式)Kafka数据上传至Hbase
  18. HackTheBox-baby nginxatsu
  19. 输入一个URL之后到页面加载的整个过程分析
  20. 给HashMap排序的方法

热门文章

  1. Python强化训练笔记(二)——元组元素的命名
  2. [Windows]win10时间同步错误的解决方法
  3. iOS 去掉UISearchBar输入框上面的黑线
  4. CoffeeScript 更优美的Javascript
  5. 十条jQuery代码片段助力Web开发效率提升
  6. Leetcode2. Add Two Numbers
  7. Linux的巡检命令
  8. IDEA的Database表的基本操作
  9. 03_java基础(四)之方法的创建与调用
  10. JDBC入门(5)--- 时间类型、大数据