LeetCode之旅-1
2016-06-29 12:53
204 查看
为了更好的学习掌握数据结构与算法,决定再网上找一些相关的题目来做,于是发现了leetcode。据说是为面试打造的,刚好也为以后的笔试做一些准备。里面的题目分为easy、medium、hard三种难易程度。我打算从易到难开始做。
做的第一道题是:Reverse String
题目内容:
Write a function that takes a string as input and returns the string reversed.
Example:
Given s = “hello”, return “olleh”.
乍一看挺简单的,于是很快的写了如下代码:
然后运行后,没什么问题就提交了,不过结果却是:Time Limit Exceeded,运行超时…
又看了一下自己的代码,遍历字符串中每一个字符,然后拼接字符串。确实效率很低,于是想到了另一种方法,转换字符串实际上就是将字符串的首尾替换位置,于是有了以下代码:
这次提交后,果然Accepted。不过用时是4ms,”Your runtime beats 38.92% of javasubmissions”,看到最好的方法是2ms,于是看了一下discuss,优化了自己的代码。
优化内容:
1.将s.length()改为array.length
2.将除法修改为加减法
优化后的代码:
提交后运行时间为2ms…
以下是我的收获:
array.length比String.length()的运行效率高。 这个貌似很容易理解,length是array的一个属性,而length()是 String的一个方法。
加减法比乘除法的运行效率高。
写完代码后,如果有时间,尽量优化代码。
即便是解决一个简单的问题,同样也可以学习到知识。
做的第一道题是:Reverse String
题目内容:
Write a function that takes a string as input and returns the string reversed.
Example:
Given s = “hello”, return “olleh”.
乍一看挺简单的,于是很快的写了如下代码:
public class Solution { public String reverseString(String s) { String result=""; for(int i=0;i<s.length();i++) { result +=s.substring(s.length()-i-1,s.length()-i); } return result; } }
然后运行后,没什么问题就提交了,不过结果却是:Time Limit Exceeded,运行超时…
又看了一下自己的代码,遍历字符串中每一个字符,然后拼接字符串。确实效率很低,于是想到了另一种方法,转换字符串实际上就是将字符串的首尾替换位置,于是有了以下代码:
public class Solution { public String reverseString(String s) { String result=""; char array[] = s.toCharArray(); char c; for(int i=0;i<s.length()/2;i++) { c=array[i]; array[i]=array[s.length()-i-1]; array[s.length()-i-1]=c; } result = new String(array); return result; } }
这次提交后,果然Accepted。不过用时是4ms,”Your runtime beats 38.92% of javasubmissions”,看到最好的方法是2ms,于是看了一下discuss,优化了自己的代码。
优化内容:
1.将s.length()改为array.length
2.将除法修改为加减法
优化后的代码:
public class Solution { public String reverseString(String s) { char array[] = s.toCharArray(); char c; for(int i=0,j=array.length-1;i<j;i++,j--) { c=array[i]; array[i]=array[j]; array[j]=c; } return new String(array); } }
提交后运行时间为2ms…
以下是我的收获:
array.length比String.length()的运行效率高。 这个貌似很容易理解,length是array的一个属性,而length()是 String的一个方法。
加减法比乘除法的运行效率高。
写完代码后,如果有时间,尽量优化代码。
即便是解决一个简单的问题,同样也可以学习到知识。
相关文章推荐
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- SQL Server中通过reverse取某个最后一次出现的符号后面的内容(字符串反转)
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi