我们工作面试和提高自身数据结构和算法能力的时候往往需要刷刷题,我选择LeetCode是通过一个留学论坛了解的。专业,覆盖语种全面。
提前说说刷题的心得:
- 尽量手写代码,少使用IDE的代码补全和智能提示。既然是提升和锻炼自己的代码功底,那就没有理由再犯没有IDE写代码会死症
- 让自己去思考本身就是一件艰难的事,所以如果遇到困难,可以借鉴但切不可抄袭他人思考成果。不然刷题就没有意义了,别贪多贪快,自己思考的才是最好的
进入LeetCode官方网站,你会看到醒目的Start coding now,没有账号的同学赶快注册吧,点击此处可以进入题目分类,接着可以根据自己的实际情况,通过难易程度选择题目(PS: 带锁的需要花钱),我是先易后难,找点信心再说 ��。
选择题目后就开始刷题之旅吧,官方提供多种语言的支持,可以实时运行检测代码,也可以自己设置自定的Testcase,介绍到此,祝各位刷题愉快,学业有成,工作顺利~
本来准备所有题目都放在一篇博文,创建专栏后发现不合适,而如果拆分每一个题目为一篇博文更不现实,想着LeetCode本身就有题目的分类,那么就按照Tag的形式来进行文章的归纳吧。
Array
1. Two Sum
Tag : Array Hash Table
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution.
译:给定两个只有整数的数组,获取和为指定数值的两个数的索引
需要假设每个输入的值都仅有一个答案
Example:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
UPDATE (2016/2/13):
The return format had been changed to zero-based indices. Please read the above updated description carefully.
方式一 暴力实现
public static int[] twoSum(int[] nums, int target) {
int[] result = new int[2];
for (int k = 0; k < nums.length; k++) {
for (int l = k + 1; l < nums.length; l++) {
if (nums[k] + nums[l] == target) {
for (int p : nums) {
if (nums[k] == p) {
result[0] = k;
}
if (nums[l] == p) {
result[1] = l;
}
}
return result;
}
}
}
return result;
}
问题分析
从问题来看,由于题目给了限制,也就是说给定的数组中肯定仅有两个数满足条件,我使用简单的冒泡挨个相加判断是否满足条件而得到答案。
- 第一/二层通过嵌套for循环遍历数组中每个数与其他数之和
- 取得两个数后,通过第三个增强for获取两个数在元数组中的索引