写点什么

ARTS Week 2

作者:Geek_c25301
  • 2023-08-26
    安徽
  • 本文字数:1715 字

    阅读完需:约 6 分钟

Algorithm 一道算法题

这周的算法题是Furthest Building You Can Reach. 并没有什么好的想法,就想着用暴力的方法来做,但是超时了。然后就想着用贪心的方法来做,但是也不知道怎么贪心,所以就看了别人的解法,发现是用优先队列来做的。


暴力解法:


class Solution {    public int furthestBuilding(int[] heights, int bricks, int ladders) {        return getFurthestBuilding(0, heights, bricks, ladders);    }
public int getFurthestBuilding(int curPosition, int[] heights, int bricks, int ladders) { if (curPosition >= heights.length - 1) return curPosition;
int dif = heights[curPosition + 1] - heights[curPosition]; if (dif <= 0) { return getFurthestBuilding(curPosition + 1, heights, bricks, ladders); } else { int max = curPosition; if (bricks > dif) { max = Math.max(max, getFurthestBuilding(curPosition + 1, heights, bricks - dif, ladders)); }
if (ladders > 0) { max = Math.max(max, getFurthestBuilding(curPosition + 1, heights, bricks, ladders - 1)); }
return max; } }}
复制代码


优先队列解法:


class Solution {    public int furthestBuilding(int[] heights, int bricks, int ladders) {        PriorityQueue<Integer> pq = new PriorityQueue<>();        int res = 0;        for (int i = 0; i < heights.length - 1; i++) {            int d = heights[i + 1] - heights[i];            if (d > 0)                pq.add(d);            if (pq.size() > ladders)                 bricks -= pq.poll();            if (bricks < 0)                return i;        }
return heights.length - 1; }}
复制代码

Review 一篇英文文章

这周看的文章是 The webpack plugin I can't live without,主要目的也是为了看看怎么优化前端项目。这篇文章主要是介绍了一个 webpack 的一个插件,叫做 webpack-bundle-analyzer,这个插件可以用来分析 webpack 打包之后的结果,可以看到每个文件的大小,以及每个文件的依赖关系。这样的话,就可以看到哪些文件比较大,然后可以进行优化。


然后看了这个视频Managing Your Bundle Size - Totally Tooling Tips,介绍了以下值得尝试的一些工具。


Bundlesize: https://github.com/siddharthkp/bundlesize


Lighthouse: https://developer.chrome.com/docs/lighthouse/overview/


Calibre: https://calibreapp.com/


pr-bot: https://github.com/GoogleChromeLabs/pr-bot


vscode-import: https://marketplace.visualstudio.com/items?itemName=wix.vscode-import-cost


speedcurve: https://speedcurve.com/

Technique/Tips 一个技术点

Share 一个 useSelector 的一个 design, 这几天处理一个 bug 的时候发现莫名的 rerender,其中有一部分原因是 useSelector(state => state)这种用法导致的,这样用的话 state 里面任何的变化都会导致一个 rerender,所以之后最好不要用这种方式,而是用 useSelector(state => state.xxx)这种方式,这样的话,只有 xxx 变化的时候才会导致一个 rerender。


https://react-redux.js.org/api/hooks#no-op-selector-check

Share 一个观点

最近看的一本书,关于利己和利他,就是作者发现在社会的顶端和底端都是同一个类型的人,都是利他的人。但是不一样的是,在底端的人不讲原则的付出,不懂得拒绝,导致自己在很多方面对自己不利。而在顶端的人,他们懂得拒绝,懂得说不,懂得在自己的原则范围内去付出,这样的话。而且有一个方法,就是把范围扩大,比如说,你还可以考虑你的家人,你的朋友,你的同事,你的公司,这样的话,你就会懂得在自己的范围内去付出,而不是无原则的付出。


比如生活中一个朋友要你无条件的付出帮他做事,对于你个人来说因为你喜欢利他所以这件事情对你没什么问题。但是,你帮他做事这件事情,很可能损害到了你家庭的利益,这不是你想看到的,所以这种情况就需要拒绝。

发布于: 刚刚阅读数: 8
用户头像

Geek_c25301

关注

还未添加个人签名 2022-03-19 加入

还未添加个人简介

评论

发布
暂无评论
ARTS Week 2_Geek_c25301_InfoQ写作社区