-
方法一:双层循环暴力求解——时间复杂度O(n*n)
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { int size = nums.size(); vector<int> result; for (int i=0; i<size-1; i++) { for(int j=i+1;j<size;j++) { if ((nums[i]+nums[j]) == target) { result.push_back(i); result.push_back(j); return result; } } } return result; } };
-
方法二:哈希表查找——时间复杂度O(n),空间复杂度(n)
意图:使用哈希表,牺牲存储空间来,降低查询所需的时间。在数组数量及其庞大时效果最佳。
思路:(1)将输入的数组装换为哈希表(map),key为数组值,value为index。(2)在得到初始化后的哈希表后,进行遍历,通过如下公式,计算得到期望的差值。(3)将差值代入map中进行查找,若有,则返回,否则重复步骤(2)。
int desiredResult=target-map[key];
阅读文章:The Key To Accelerating Your Coding Skills
近期也刚好把MIT公开课的《计算机科学与编程导论》看完了,开始在做编程作业。感觉课程和这篇文章讲述的内容很相似。要想自身的相关技能有一个突破或者飞跃,前期的准备和磨砺是必不可少的,如文中提到的算法、数据结构。以前我关注的点实在是太小太小了,小到“只见树木不见森林”。
再有一点是技术栈的更新,如今新技术层出不穷,常年苦追,什么时候才是尽头?为何不尝试停下来仔细去思考一番,了解新旧技术背后的本质,这个才是最重要的。保持日常充沛的精力,继续前进吧!
因为在日常中需接触C++的多线程调试,但苦于不知道调试方法,遂去官网查看并学习了VS2017的多线程调试方式。
其中主要介绍内容如下:
- 并行堆栈
- 并行监视
- 线程的冻结、解冻
- 标记
- 添加数据监视
- 模块
- pdb文件(Symbol file)
- 模块符号导入
- 源代码(或反汇编代码)的定位
- 线程
- 当前应用的线程
相关学习资源:
附图:
开始看《算法图解》这本书,弥补日前算法这块的空缺。主要学习了数组和链表各自的优势劣势,详细内容见我的CSDN博客:数组与链表——异同分析