ARTS 第 8 周

栏目: 服务器 · 发布时间: 6年前

内容简介:每周一道算法、点评一篇英文技术文章、学习一个技术技巧、分享一个技术观点和思路Problem:正则表达式

每周一道算法、点评一篇英文技术文章、学习一个技术技巧、分享一个技术观点和思路

Algorithm

Problem: String to Integer (atoi)

思路 1

正则表达式

class Solution {
    public int myAtoi(String str) {
        str = str.trim();
        Pattern compile = Pattern.compile("^[+|-]?\\d+");
        Matcher matcher = compile.matcher(str);
        long rest = 0;
        int flag = 1;
        if (matcher.find()) {
            String group = matcher.group();
            char[] chars = group.toCharArray();
            for (char c : chars) {
                if (c == '-') {
                    flag = -1;
                } else if (c == '+') {
                    flag = 1;
                } else {
                    rest = rest * 10 + Integer.valueOf(c + "");
                }

                if (rest*flag > Integer.MAX_VALUE) {
                    return Integer.MAX_VALUE;
                }
                if (rest*flag < Integer.MIN_VALUE) {
                    return Integer.MIN_VALUE;
                }
            }
        }
      return (int) rest * flag;
    }
}

优化

class Solution {
    public int myAtoi(String str) {
        if (str==null) return 0;
        char[] ca = str.toCharArray();
        
        long sum = 0;
        int sign = 1;
        int i=0;

        while (i<ca.length && ca[i]==' ') i++;
        
        if (i==ca.length) return 0;

        if (ca[i]=='+' || ca[i]=='-') {
            sign = ca[i++] == '-' ? -1:1;
        } else if ( ca[i]<'0' || ca[i]>'9' ) {
            return 0;
        }
        
        while (i<ca.length && ca[i]>='0' && ca[i]<='9') {
            sum = sum*10 + (ca[i++] - '0');
            if (sum*sign>Integer.MAX_VALUE) return Integer.MAX_VALUE;
            if (sum*sign<Integer.MIN_VALUE) return Integer.MIN_VALUE;
        }
        
        return (int) (sign*sum);
    }
}

Review

In UNIX Everything is a File

在 UNIX 中一切都是文件,将一切都抽象成了文件。其实包含了 2 个含义:

  • 在UNIX中,一切都是字节流
  • 在UNIX中,文件系统用作通用名称空间

在现代UNIX操作系统中,进程之间的所有设备和大多数类型的通信都作为文件系统层次结构中的文件或伪文件进行管理和显示,这种基本的 UNIX 愿景和设计原则,被称为“一切都是文件”。

Tip

《编程珠玑》里面一个关于快速 排序 的优化

我们的快速排序花费了大量的时间来排序很小的子数组,如果用插入排序之类的简单方法来排序这些很小的子数组,程序的速度会更快。

判断是否是小数组

if u-l < cutoff
    return

用快排来排子数组

quickSort(0,n-1)
insertSort()

如果数组已经按升序排好了,那么总共需要 O(n 2 ) 的时间。我们随机选择划分元素就可以得到好得多的性能。

void quickSort(l, u)
    if u - l < cutoff
        return
    swap(1, randint(l, u))
    t = x[l]; i = l; j = u + 1
    loop
        do i++; while i <= u && x[i] < t
        do j--; while x[j] > t
        if i > j
            break
        temp = x[i]; x[i] = x[j]; x[j] = temp
    swap(l, j)
    quickSort(l, j-1)
    quickSort(j+1, u)

Share

推荐一本书《Linux就该这么学》有实体书也有电子版,挺不错的一本 Linux 入门书籍,对新手也挺友好的。如果是运维人员,我建议照着书上的实验全部实现一遍,如果是开发人员,则可以选择性学习。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

构建高性能Web站点

构建高性能Web站点

郭欣 / 电子工业出版社 / 2009-8 / 59.00元

本书围绕如何构建高性能Web站点,从多个方面、多个角度进行了全面的阐述,涵盖了Web站点性能优化的几乎所有内容,包括数据的网络传输、服务器并发处理能力、动态网页缓存、动态网页静态化、应用层数据缓存、分布式缓存、Web服务器缓存、反向代理缓存、脚本解释速度、页面组件分离、浏览器本地缓存、浏览器并发请求、文件的分发、数据库I/O优化、数据库访问、数据库分布式设计、负载均衡、分布式文件系统、性能监控等。......一起来看看 《构建高性能Web站点》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具