Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ARTS-2 #4

Open
blackwuxin opened this issue Apr 13, 2019 · 0 comments
Open

ARTS-2 #4

blackwuxin opened this issue Apr 13, 2019 · 0 comments

Comments

@blackwuxin
Copy link
Owner

blackwuxin commented Apr 13, 2019

ARTS,即:每周完成一个ARTS:每周至少做一个 leetcode 的算法题、阅读并点评至少一篇英文技术文章、学习至少一个技术技巧、分享一篇有观点和思考的技术文章,至少坚持一年。(也就是 Algorithm、Review、Tip、Share 简称ARTS)。

Algorithm

本周算法题:3. 无重复字符的最长子串

问题描述:

给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。

示例 1:

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

思路分析:

1、遍历字符串。
2、找出不含重复的子串。这里复杂点如何查找不含重复的子串。考虑遍历字符串过程中,使用临时数组存储不含重复的子串。
3、如何下一个字符已存在临时数组中,截断临时数组,保留找相同字符之后的字符。
4、遍历存储临时数组长度,每次找到相同字符时,取当前临时数组长度和长度变量最大值。
5、遍历数组完成,返回长度变量。

算法实现:

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
    var length = 0;
    var temp = [];
    if(s.length ==0){
        return 0;
    }
    temp.push(s[0]);
    for(var i=1,l=s.length;i<l;i++){
        if(temp.indexOf(s[i])!=-1){
            if(temp.length > length){
                length = temp.length;
            }
            temp = temp.slice(temp.indexOf(s[i])+1);
            temp.push(s[i]);
        }else{
            temp.push(s[i]);
        }
    }
   if(temp.length > length){
           length = temp.length;
    }
    return length;
};

时间复杂度:O(n)
空间复杂度:O(n)

Review

理解github的流程

  • 创建一个分支

    确保主分支的任何内容都是可部署的。

    创建新分支处理功能或者修复,名称应是描述性的,以便他人可以看到正在处理的内容。

  • 添加提交记录

    每个提交都应有提交描述,解释为什么进行更改。

    每个提交都被视为一个单独的变更单元。如果发现错误方便回滚更改。

    编写清晰的提交信息,可以更方便地让其他人跟进并提供反馈。

  • 打开拉取请求

    PR会启动有关你提交的讨论,它与Git仓库紧密集成,可以确切地看到请求将会合并哪些更改。

    PR对于贡献开源项目和管理共享仓库很有用。

  • 讨论并检阅你的代码

    注意编码风格要和项目指南一致,添加单元测试。

  • 部署

    检查完PR通过测试后,你可以部署在生产环境来验证它。如果你的分支有问题,你可以将现有的主分支部署到生产中来回滚它。

  • 合并

    你的更改已在生产中得到验证,是时候将代码合并到主分支中了。

    提交PR的时候可以将问题与代码相关联。合并Pull请求后,相关问题也将关闭。例如Closes #32

Tip

Javascript随机获取真假:

var random_boolean = Math.random() >= 0.5;

Share

React Native性能优化

  • 先渲染一个简单的视图,比如使用骨架屏,然后延迟渲染完整的UI。
  • 对于拥有长列表的页面,可以只渲染首屏,当滑动的时候再添加剩余的View。
  • 减少重绘次数,使用shouldComponetUpdate ,PureComponent。
  • 列表使用FlatList替换ListView,ListView有内存问题。
  • 动画优先使用Animated(useNativeDriver:true),Style transform(translateX/Y,scale,rotate)
  • 使用inline require按需加载模块。
  • 去除console.log语句。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant