尝试LeetCode

起因

OJ在学生时代应该都有所接触,作为程序设计与算法课程的实践内容也在一些OJ上做过少数的一些题目。不得不说,多年的习惯让在OJ上解题成为了一件很愉悦的事情。

工作后,原本薄弱的算法知识感觉消失殆尽,尽管在每天的工作中,组装、修改成为了工作的主题,可是总觉得自己不应如此,希望自己能保持毕业前那样积极的学习态度,希望自己能把之前的自主学习和思考的习惯保持下来。然而自己在每天的工作之后,惰性还是占了上风,阅读自然不少,可是这类基础的训练却扔下了。

本科期间由于学校身边的环境的缘故,自学了Java的基础编程。这半年对Android开发很感兴趣,再次接触Java,自己实现的过程中,感觉自己再次的丢掉了很多东西。

工作两年,经历了最开始的模仿、学习阶段之后,也尝试了各个方向,单独承担系统的开发维护工作中,更是觉得基础的知识,诸如网络OS等基础知识在解决问题上能对思路起到打磨的作用,避免自己掉进 case by case 的坑里。积累经验当然重要,但是个人觉得更难得的是学会如何找到解决问题的方式,面向StackOverflow编程并不是一个好的选择。

近期看到 云风 大牛的关于反转单向链表微博,自己下班尝试编写了一下,也是花了一会儿时间才能顺畅的写完。这两天也是看到 liaohuqiu 大牛发起的 LeetCode攻克计划,觉得是时候重新开始修行了。

目的

LeetCode 的目的主要有两个:

  • 从基础开始,重新学习Java编程
  • 重新学习算法知识

第一个理由可能引人发笑,然而这确实是一个手段。自己在学习编写Java程序的过程中曾经过分的贪图速度,跳过了很多自认为基础的语言上的内容,在比较自己编写的代码与熟练的同事的代码中,更能有所体会。

计划

基于第一个原因,所有的LeetCode解题都会使用Java完成。

目前来看,一共有83道 Easy 题目,167道 Medium 题目,以及74道 Hard 题目。

不求过分贪心,希望半年内,我能把所有的 Easy 完成。

对于解决的题目,将会在blog里贴出自己的解题方案以及简要的解题思路,同时在解题过程中,尽量通过完备自己的思路和case解决问题,而不是通过尝试AC来解决问题。

2016年06月18日更新

对于过于简单的题目,将不会编写解题报告。

会挑选更有意思的一些题目。

已解决问题 [60]

Two Sum Easy
Add Two Numbers Medium
Longest Substring Without Repeating Characters Medium
Median of Two Sorted Arrays Hard
ZigZag Conversion Easy
Reverse Integer Easy
String to Integer (atoi) Easy
Palindrome Number Easy
Roman to Integer Easy
Longest Common Prefix Easy
Remove Nth Node From End of List Easy
Valid Parentheses Easy
Merge Two Sorted Lists Easy
Swap Nodes in Pairs Easy
Remove Duplicates from Sorted Array Easy
Remove Element Easy
Length of Last Word Easy
Plus One Easy
Add Binary Easy
Remove Duplicates from Sorted List Easy
Merge Sorted Array Easy
Pascal’s Triangle Easy
Pascal’s Triangle II Easy
Best Time to Buy and Sell Stock Easy
Valid Palindrome Easy
Linked List Cycle Easy
Min Stack Easy
Excel Sheet Column Title Easy
Majority Element Easy
Excel Sheet Column Number Easy
Factorial Trailing Zeroes Easy
Rotate Array Easy
Reverse Bits Easy
Number of 1 Bits Easy
Happy Number Easy
Remove Linked List Elements Easy
Count Primes Easy
Reverse Linked List Easy
Contains Duplicate Easy
Contains Duplicate II Easy
Rectangle Area Easy
Power of Two Easy
Implement Queue using Stacks Easy
Delete Node in a Linked List Easy
Valid Anagram Easy
Add Digits Easy
Ugly Number Easy
First Bad Version Easy
Move Zeroes Easy
Word Pattern Easy
Range Sum Query - Immutable Easy
Power of Three Easy
Power of Four Easy
Reverse String Easy
Reverse Vowels of a String Easy
Intersection of Two Arrays Easy
Intersection of Two Arrays II Easy
Sum of Two Integers Easy
Guess Number Higher or Lower Easy
Ransom Note Easy