参加了左耳听风的ARTS打卡,坚持一个月,对自己会有什么情况呢,我不知道,但我会照着这个目标坚持下去,坚持100天。一个习惯养成是21天,那如果坚持100天,效果肯定是杠杠滴了。
所谓ARTS: 每周至少做一个LeetCode的算法题;阅读并点评至少一篇英文技术文章;学习至少一个技术技巧;分享一篇有观点和思考的技术文章。(也就是Algorithm、Review、Tip、Share 简称ARTS)
因为是第一次,选择一个难度稍小的先定个基调two-sum
题目描述:『给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。』
我本身能力太low,这道题用了三个解法中的最耗时的解法,就是暴力解答法,通过双重循环来达到目的。时间复杂度达到了O(n^2),这就意味着在同样的情况下,我比别人执行的结果更耗时,效率更低。对于一般的程序而言没问题,但对于大型项目来说,就是一个头疼的事情了。算法题,还是需要更好的去理解其本质,想更多的办法。另外两个解法就是两次哈希查找和一次哈希查找的方式,都比这个性能高几倍。
// 暴力法,遍历每个元素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");
}
https://proandroiddev.com/our-way-to-mvvmi-and-mistakes-we-made-when-implementing-mvvm-5f5448b5ad50 该文章讲述的是一个Android的开发团队在项目过程中因为不断的迭代产生了很多烦恼,就对代码进行了架构整改,通过Google推荐的MVVM的框架进行整改,期间遇到的问题以及解决方案进行了阐述。
看了下这几个问题,回想起当初自己学这个框架也曾遇到过错误3和错误4中的问题,深有感触。框架是个好东西,但是选框架也是一门技术活,现在Android的框架,已经不仅仅有最初学习的时候的MVC,还有MVP,MVVM等等,选择适合自己的框架,需要多方面考虑。还需要进行合适的预研,多看看别人的经验,很多时候,大家碰到的问题都是一样的,你今天遇到问题,把他分享出来,明天他预研的时候遇到了,对后面整体迁移会有很大的帮助。
对技术还有分享的心态,要有敬畏之心。在一个分享的世界里,大家共同进步,才会更好的解决问题,更好的发展行业。
把平时学习的代码提交到了GitHub,那今天就先来说说git命令的第一步吧
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技能还是需要学会的,以上就是最基本的命令,你掌握了吗?
刚好在学习设计模式,跟着打卡一起学,效率更高