左耳听风打卡.ARTS (第1周)

ARTS 挑战的第1周


{success} 每周完成一个 ARTS: 至少做一个 leetcode 的算法题、阅读并点评至少一篇英文技术文章、学习至少一个技术技巧、分享一篇有观点和思考的技术文章。(也就是 Algorithm、Review、Tips、Share 简称 ARTS)

Algorithm

{success} 每周至少做一个 leetcode 的算法题(先从 Easy 开始,然后再 Medium,最后才 Hard)。如果不训练看再多的算法书,依然然不会做算法题,看完书后需要训练。关于做Leetcode的的优势,你可以看一下 coolshell 上的文章 LEETCODE 编程训练

LeetCode 1. 两数之和 解题语言 PHP

题:

给定一个整数数组 `nums` 和一个目标值 `target`,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

解:

class Solution {
     function twoSum($nums, $target) {
        for($i=0; $i<count($nums); $i++){
            $subKey = array_search($target-$nums[$i], $nums);
            if($subKey == $i){
                $numsCopy = $nums;
                unset($numsCopy[$subKey]);
                $subKey = array_search($diff, $numsCopy) ?? false;
            }
            if ($subKey !== false) {
                return [$i, $subKey];
            }
        }
    }
}

排名

  • 执行用时 : 204 ms, 在 Two Sum 的 PHP 提交中击败了 67.16% 的用户
  • 内存消耗 : 15.7 MB, 在 Two Sum 的 PHP 提交中击败了 100.00% 的用户

Review

{success} 主要为了学习英文,如果英文不行,基本上无缘技术高手。

本周阅读的是 71 | 程序员练级攻略:正式入门 中提及的这篇关于如何有效地快速提高自己编程能力的文章(The Key To Accelerating Your Coding Skills)。前两段阅读英文原文,但限于我只有 2000 的词汇量 所以读起来很费劲。索性就在 sougou 上找中文翻译了,这篇文章的重点可以概括为以下几点:

  1. 要可以锻炼我们独立解决问题的能力。
  2. 最好用谷歌搜索你在 Coding 中遇到的问题。
  3. 最好通过文档来学习,并摆脱教程。还有看视频教程其实非常花费时间,所以尽量避免这种方式。
  4. 在人生的每一天里探索自我边界以外的东西。
  5. 数据结构与算法的重要性。
  6. 敲代码时要注意细节,这种习惯可以提高你 Debug 的能力。

想起皓叔博客里的这句话:

无论你做什么事,你都会面对各式各样的困难,这对每个人来说都是一样的,而只有兴趣、热情和成就感才能让你不畏惧这些困难

更回顾 Review 的初衷是学习英语,所以还是乖乖地啃完英文原文吧。丢脸~

Tips

{success} 总结和归纳日常工作中的知识点,遇到的问题,踩过的坑。

  1. command + t open a new tab on google chrome
  2. 通过 Google Images 学习理解单词: etc:gulf 要比 bay 所指的海湾更大。
  3. 遇到大数值需要遍历的情况常常让 PHP 捉襟见肘,但 生成器函数: yieldPHP中被忽略的性能优化利器:生成器可以发挥作用。
  4. array_search('c', ['a', 'b', 'c']) PHP 判断 Array['a', 'b', 'c'] 中是否存 a 这个元素,并返回索引。
  5. Google Dictionary (Google chrome extend):双击即可弹出非常简单的弹窗,附带一个英文发音和简短的英文释义,用以轻度查询
  6. 陈皓分享的科-学-上-网分享了很多好用的墙外服务器攻略; 之前折腾了很久都没有搭好SSR,这次跟着Google Cloud Platform免费申请&一键搭建SSR & BBR加速教程 可算一气呵成。
  7. 为你的项目增加漂亮的 Markdown 文档——binarytorch/larecipe本博客在用。

Share

{success} 输出价值观,分享一篇有观点和思考的技术文章。

前几个月就想开始 ARTS,苦于钻研 PHP 的 Laravel 框架无法自拔所以一直拖到了这周。其实主要是打开 LeetCode 一秒变睁眼瞎。

由于非计算机专业还多本科课程内容其实我是不具备的,这也导致我对算法和数据结构望而却步。但是今天开到 LeetCode 也支持 PHP 语法,谢天谢地顿时多了几份信心。不过也只是刚开始学习 PHP 时接触了一星半点数据结构与算法,所以为了给自己增加信心就挑了我觉得最简单的一道题:1. 两数之和 解题语言 PHP;倒腾了 1 个小时,参考了其他同学的提交的答案才算做出来,但是发现执行用时 : 204 ms, 在Two Sum的PHP提交中击败了67.16% 的用户。一定要再看看其他 33% 的 PHP 代码。

周末翻了下极客时间里王争老师的《数据结构与算法之美》。其实之所以选这门课主要原因是感性的,觉得老师的名字像极了武林高手。学这门课光心理建设就花了半天时间,学习是要付出时间成本的,当然要想清楚为什么一定要学,学会了以后对我有什么帮助(短期或长远)。

“其实学习数据结构和算法,并不是为了 死记硬背几个知识点。目的是建立时间复杂度,空间复杂度意识,写出高质量的代码,能够设计基础架构,提升编程技能,训练逻辑思维,积攒人生经验,以此获得工作回报,实现个人价值完善人生“ 原来对于学习这件事可以有这么深刻的认知。我希望掌握数据结构与算法,可以让我对看问题的深度,解决问题的角度都有所改变。收藏同学的笔记:为什么学习数据结构与算法?

  1. 直接好处是能够写出性能更优的代码
  2. 算法,是一种解决问题的思路和方法,有机会应用到生活和事业等其他方面。
  3. 长期来看,大脑思考能力是个人最重要的核心竞争力,而算法是为数不多的能够有效训练大脑思考能力的途径之一。
本作品采用《CC 协议》,转载必须注明作者和本文链接
相信时间和变化
本帖由系统于 3年前 自动加精
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 11
class Solution
{

    /**
     * @param Integer[] $nums
     * @param Integer $target
     * @return Integer[]
     */
    function twoSum($nums, $target)
    {
        if (!isset($nums[1])) return;
        foreach ($nums as $key => $num) {
            unset($nums[$key]);
            $result = array_search($target - $num, $nums);
            if ($result !== false) return [$key, $result];
        }
    }
}

这样会不会快一点?

5年前 评论

咦,,我记得 leetcode 没有 PHP 的啊,,,

5年前 评论

@largezhou LeetCode 中国LeetCode 都可以用 PHP ,Python, Go, Java, Javasrcript 等语言。

file

file

5年前 评论
OMGZui

坚持最重要

5年前 评论

哎 过两天 又忘记了
还是需要在日常 能用上

5年前 评论

楼主,我也准备开一贴,跟大家共同进步 :cow:

5年前 评论

@zIym :clap: :smiley:可以和大牛结伴而行啦

5年前 评论

@iVerywang 别说笑了,我只是一个小白 :sob:

5年前 评论

@子兴的期盼 应该是这几个月加上的吧,去年看的时候只支持 Java 和 C,C++

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!