前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dimple在左耳听风ARTS打卡(第一期)

Dimple在左耳听风ARTS打卡(第一期)

作者头像
程序员小跃
发布2019-12-25 14:32:58
3590
发布2019-12-25 14:32:58
举报
文章被收录于专栏:程序员小跃程序员小跃

参加了左耳听风的ARTS打卡,坚持一个月,对自己会有什么情况呢,我不知道,但我会照着这个目标坚持下去,坚持100天。一个习惯养成是21天,那如果坚持100天,效果肯定是杠杠滴了。

所谓ARTS: 每周至少做一个LeetCode的算法题;阅读并点评至少一篇英文技术文章;学习至少一个技术技巧;分享一篇有观点和思考的技术文章。(也就是Algorithm、Review、Tip、Share 简称ARTS)

Algorithm LeetCode算法

因为是第一次,选择一个难度稍小的先定个基调two-sum

题目描述:『给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。』

我本身能力太low,这道题用了三个解法中的最耗时的解法,就是暴力解答法,通过双重循环来达到目的。时间复杂度达到了O(n^2),这就意味着在同样的情况下,我比别人执行的结果更耗时,效率更低。对于一般的程序而言没问题,但对于大型项目来说,就是一个头疼的事情了。算法题,还是需要更好的去理解其本质,想更多的办法。另外两个解法就是两次哈希查找和一次哈希查找的方式,都比这个性能高几倍。

代码语言:javascript
复制
// 暴力法,遍历每个元素x,并查找是否存在一个值与target - x 相等的目标元素
public static int[] twoSum(int[] nums, int target) {
        int[] result = new int[2];
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[j] == target - nums[i]) {
                    result[0] = i;
                    result[1] = j;
                    return result;
                }
            }
        }
        return result;
    }

// 一次哈希
public static int[] twoSumHash(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            map.put(nums[i], i);
        }

        for (int i = 0; i < nums.length; i++) {
            int complement = target - nums[i];
            if (map.containsKey(complement) && map.get(complement) != i) {
                return new int[] {i,map.get(complement)};
            }
        }

        throw new IllegalArgumentException("No two sum solution");
    }

Review 阅读并点评至少一篇英文文章:

https://proandroiddev.com/our-way-to-mvvmi-and-mistakes-we-made-when-implementing-mvvm-5f5448b5ad50 该文章讲述的是一个Android的开发团队在项目过程中因为不断的迭代产生了很多烦恼,就对代码进行了架构整改,通过Google推荐的MVVM的框架进行整改,期间遇到的问题以及解决方案进行了阐述。

  • Mistake 1: Passing LiveData objects as params to repository and updating the value there
  • Mistake 2: Combining business logic and presentation logic in ViewModel.
  • Mistake 3: Not saving state onSaveInstanceState(), using only ViewModels to persist View state.
  • Mistake 4: Not dropping Repository callbacks when View is destroyed
  • Mistake 5: Directly calling ViewModel methods from View

看了下这几个问题,回想起当初自己学这个框架也曾遇到过错误3和错误4中的问题,深有感触。框架是个好东西,但是选框架也是一门技术活,现在Android的框架,已经不仅仅有最初学习的时候的MVC,还有MVP,MVVM等等,选择适合自己的框架,需要多方面考虑。还需要进行合适的预研,多看看别人的经验,很多时候,大家碰到的问题都是一样的,你今天遇到问题,把他分享出来,明天他预研的时候遇到了,对后面整体迁移会有很大的帮助。

对技术还有分享的心态,要有敬畏之心。在一个分享的世界里,大家共同进步,才会更好的解决问题,更好的发展行业。

Tip 一个技术技巧

把平时学习的代码提交到了GitHub,那今天就先来说说git命令的第一步吧

代码语言:javascript
复制
echo "# 编辑内容 " >> README.md // 新建一个README文档
git init //初始化本地仓库
git add README.md // 添加刚创建的README文档
git commit -m "注释信息"  // 提交到本地仓库,并添加注释信息
// 连接远程仓库并建立一个名叫:origin的别名,其他名字也可以;yourname 替换成你的用户名,前提是在GitHub上创建仓库
git remote add origin  git@github.com:yourname/xxx.git 
// 将本地仓库的文件提交到别名为origin的地址的master分支下,-u 为第一次提交,需要创建master分支,后续就不需要了
git push -u origin master

作为一名开发人员,必要的git技能还是需要学会的,以上就是最基本的命令,你掌握了吗?

Share 一篇有观点和思考的技术文章

刚好在学习设计模式,跟着打卡一起学,效率更高

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 奔跑吧攻城狮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Algorithm LeetCode算法
  • Review 阅读并点评至少一篇英文文章:
  • Tip 一个技术技巧
  • Share 一篇有观点和思考的技术文章
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档