2020年7月8日打卡

面试题 16.11. 跳水板

题目

你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。

返回的长度需要从小到大排列。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/diving-board-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解

没有任何难度的小学数学,直接给出代码:

	vector<int> divingBoard(int shorter, int longer, int k) {
        int diff = longer - shorter, sum = k * shorter;
        if(k == 0){
            return vector<int>{};
        }
        if(diff == 0){
            return vector<int> {shorter * k};
        }
        vector<int> v(k+1);
        for(int i = 0; i <= k; i++){
            v[i] = sum + diff * i;
        }
        return v;
    }

不过该题我还是有一些收获,知道了 vector 这种类型的数据结构先初始化再逐个修改的速度要快于调用诸如 *push_back()*这种函数。

关于前天题目的强化

前天的题目老哥给我做了强化,将矩阵的长与宽范围扩大,2 < H,W < 1e5,并且障碍点小于2000个。这个就没办法用之前的动态规划了,因为矩阵的长和宽都扩大到了 1e5 ,再用原来的方法必定超时。我自己进行了一些思考,包括这个矩阵是稀疏矩阵,能不能利用稀疏矩阵的特性(不能,能也不会),后来也考虑到能不能做减法,用整个矩阵可走的路径减掉障碍点存在的路径(整个矩阵的路径数目不会算,故也放弃)。走投无路问了老哥到底该怎么做,首先第一步是计算整个矩阵的路径数目(我猜对了,但是我还是不会做),在 Leetcode 该题的前一个题中我找到了方法——排列组合,这个机器人不论怎么走步数是一定的,即 H + W - 2 步 而且一定是向下 H - 1 向右 W - 1 (不懂请自行画图),那问题就简单了,变成了计算在 H + W - 2 步中哪些步是向下的哪些步是向右的,即 C(H+W-2, H-1),这就计算出了矩阵在没有障碍点情况下的路径总数;第二步就是减掉包含障碍点的路径,该部分需要进行动态规划(为啥直接就想到动态规划了我也不知道),进行如下考虑:A,B 两个障碍点,A点在B点的左上角,经过A点的路径可能经过B点,但经过B点的路径不一定经过A点,整个矩阵的路径数 = 不考虑障碍点的路径数 - 经过A点的路径数 - 只经过B点的路径数,根据该式子可推出存在多个障碍点时,每个障碍点考虑的都是经过该点以及该点右下点的路径数,而当前点的路径数可以这么算,只经过B的路径数 = 经过A的路径数 - AB间路径数,可知每个障碍点都需要减掉前n个障碍点的路径,该路径数可迭代计算 Numn+1 = Sumn+1 - (Num1…Numn)(x1…xn) xn+1,其中(Num1…Numn)(x1…xn) xn+1为将前n个点看作一个大点(动态规划就是一种迭代来着?我记得在哪里看过),做该大点与第 n+1 个点的路径数,Sumn+1 为经过n+1点的路径总数,Numn+1为经过该点但不经过之前n个点的数量和。因为我数学基础不太行,老哥的dp方程我实在是没看太懂,就不在这里瞎掰了,这大概就是我对强化部分的理解,因为没有测试数据啥的,也只是个思路而已。

猫喜欢 吉良吉影? 洛夫克拉夫特

看标题就知道了,今天看了《乌撒的猫》、《恐怖的老人》和《树》。

《乌撒的猫》

算是名篇了,据说这是洛夫克拉夫特喜欢自己家的猫所写,恐怖小说也不算,我看来就一篇爱猫的寓言。乌撒这个城市有个奇怪的法律:该城市内任何人不允许杀猫,起源是最初乌撒城内住着一对老人,天天以杀猫为乐,邻居想抗议但是老人形象比较恐怖而且住的地方也十分偏僻,一直以来就不了了之了。某天来了一伙流浪商人,里面有个小男孩和一只黑猫相依为命,结果到了乌撒黑猫就失踪了,小男孩听市民的描述大概知道猫是被那对老人杀了,就用自己的语言向不知是谁祈祷了,当晚乌撒的市民发现自己家的猫都不见了,市民本来以为是猫都被老人杀了,第二天猫又都突然回来了而且好几天都不吃东西。之后鉴于一个男孩的目击证明大家终于鼓起勇气去看那对老人,发现他们只剩骨头、肉被剔的干干净净,之后就有了那条法律。这里为了突出气氛引用一下书中的描写:

阿塔尔发誓说,他曾在黄昏时看见乌撒所有的猫都聚集在那个被诅咒的院落的树下,成两列纵队绕着破屋围成一圈、缓慢而庄严地踱步,仿佛是在执行某种前所未闻的动物的仪式。
他们只发现两具被剔得干干净净的人类骨架躺在泥地上,在阴暗的角落里爬着一大群甲虫。

更有趣的是我居然找到了这么一句话

”在我的世界观里猫是不可欺的,谁欺负猫我就让谁得不到好下场。”by H.P.猫奴·洛夫克拉夫特

果然喜欢猫的都是好人

《可怕的老人》

传统的恐怖短篇,一个独来独往、相貌不堪的独居老人,天天和一堆吊起来的瓶子说话,正巧某天有3个倒霉的贼盯上他,被他用短剑削成碎块、扔进海里,不过细节上还真是不错,尤其是在外放风的贼怕两个同伴过度伤害老人而往门里看,结果只看见那个老人的脸露出瘆人的笑容,而且他发现老人的眼睛是黄色的(暗示非人类?)。

《树》

两个表面兄弟艺术家互坑?俩艺术家平时像兄弟似的,有个领主让他俩雕刻一个神像,谁的好要谁的(会扬名万世那种),俩人刚开始还行,后来一个得病一直不好就死了(医生都很奇怪为啥越来越重,另一个一直照顾他),死之前让另一个在他坟上种一个橄榄叶子,另一个照办了。等雕像出来后,领主来拿之前,长出的橄榄树压塌了另一个的房子,人和雕像都没了,以后每次有风吹过橄榄树的时候都会出现类似“我知道!我知道!”的低语。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值