LeetCode之旅-1

为了更好的学习掌握数据结构与算法,决定再网上找一些相关的题目来做,于是发现了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”.

乍一看挺简单的,于是很快的写了如下代码:

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…
以下是我的收获:

  1. array.length比String.length()的运行效率高。 这个貌似很容易理解,length是array的一个属性,而length()是 String的一个方法。
  2. 加减法比乘除法的运行效率高。
  3. 写完代码后,如果有时间,尽量优化代码。
  4. 即便是解决一个简单的问题,同样也可以学习到知识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值