ARTS-week-1
1. Algorithm
https://leetcode.com/problems/two-sum/
先从最简单的两个数之和开始吧。准备先拿javascript开始刷起,然后拿C++在刷一遍
解题思路:
1、首先想到的就是暴力方式两层for循环
var twoSum = function(nums, target) {
for (let i=0; i<nums.length; i++) {
for (let j=i+1; j<nums.length; j++){
if (nums[i] + nums[j] === target) {
return [i, j];
}
}
}
};
果不其然,提交之后200多毫秒
2、先给原始数据排序,然后通过判断数据两端相加的和,如果大于target则向左移动,如果小于target则向右移动
var twoSum = function(nums, target) {
let temp = JSON.parse(JSON.stringify(nums))
nums.sort(sortNumber)
let i=0;
let j=nums.length-1;
let real=[];
while(i<j) {
if (nums[i] + nums[j] > target) {
j--;
} else if (nums[i] + nums[j] < target){
i++;
} else {
real = [nums[i],nums[j]]
break;
}
}
return [temp.indexOf(real[0]), temp.lastIndexOf(real[1])]
};
function sortNumber(a,b) {
return a-b
}
时间复杂度变成了O(n),但是排序还是浪费了一定的时间
3、求出target和数组中元素的差值放在对象里面,类似于hash表解法
var twoSum = function(nums, target) {
let map = {};
let i=0;
let dist=0
while(i<nums.length) {
dist = target - nums[i];
if(map[dist] !== undefined) {
return [map[dist], i]
}
map[nums[i]] = i;
i++;
}
};
2. Review
http://norvig.com/21-days.html
我觉得文章中写的最好的一句话是Bad programming is easy. Idiots can learn it in 21 days, even if they are dummies.把编程这门手艺学好还是相当难的,需要长时间有针对性的练习,平时工作中可能只是为了完成工作而去搬砖,但是我觉得需要我们自己去抽出一些时间,提升自己的手艺,不管以后是否从事编程相关工作了
3. Tips
之前开发的项目中用到的go mod命令,整理一下
4. Share
分享给大家一本书吧。《刻意练习》
我们熟知的一万小时理论并不一定是正确的,书中的观点,学习某一项技能到很深的程度,并不一定需要一万小时,需要的只是找到正确的方式对你想学习的技能进行深度的训练。码农之所以被称为码农,就是因为我们平时干的净是一些基于原有Base的CRUD的活,长时间下去只能在业务上比较熟练,技能上其实没有任何的成长。
工作这几年虽然也学到了一些东西,但是跟一些大神比起来,相差的太多了。之前一直以为是自己的智商问题,直到我听到了一句话,“以普通人努力程度之低,远远达不到拼天赋的程度”,平时工作中只会埋头写CRUD,好不容易有点空余时间,也被手机给夺走了。
期望好好学完昊哥的课程,努力认真的打卡,争取让自己的编程水平上几个台阶
版权声明: 本文为 InfoQ 作者【saddamwilson】的原创文章。
原文链接:【http://xie.infoq.cn/article/67429ba898af758c6be379cf9】。未经作者许可,禁止转载。
评论