志当存高远,望尽天涯路

人生已如此艰难,就不要再拆穿了


  • 首页

  • 归档

  • 分类

  • 标签

array-rotate

发表于 2019-01-07 | 分类于 算法

Rotate Array给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

暴力办法(超时)

每次移一位

  • 时间复杂度O(n*k)
  • 空间复杂度O(1)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    /**
    * @param {number[]} nums
    * @param {number} k
    * @return {void} Do not return anything, modify nums in-place instead.
    */
    var rotate = function (nums, k) {
    //暴力法,每次一个元素
    while (k > 0) {
    var last = nums[nums.length - 1];
    for (let i = nums.length - 1; i > 0; i--) {
    nums[i] = nums[i - 1];
    }
    nums[0] = last;
    k--;
    }
    };

引入额外数组

整数相加求和

发表于 2019-01-03 | 分类于 算法

函数处理大数据的相加问题,所谓的大数据是指超出了整型,长整型之类的常规数据类型表示范围的数据。实现语言不限

阅读全文 »

implement-bind

发表于 2018-12-17 | 分类于 基础

bind() 方法创建一个新的函数,在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用。

阅读全文 »

implement-object-create

发表于 2018-12-06 | 分类于 基础
1
2
3
4
5
6
7
if(typeof Object.create !== 'function'){
Object.create = function(proto){
var fNOP = function(){};
fNOP.protoype = proto;
return new fNOP();
}
}

你真的了解浅比较吗?

发表于 2018-10-07 | 分类于 基础

结论

当对比的类型为Object的时候并且key的长度相等的时候,浅比较也仅仅是用Object.is()对Object的value做了一个基本数据类型的比较,所以如果key里面是对象的话,有可能出现比较不符合预期的情况,所以浅比较是不适用于嵌套类型的比较的。

阅读全文 »

jenkins发布node项目

发表于 2018-06-02

安装

1
brew install jenkins
阅读全文 »

二分查找

发表于 2018-06-01 | 分类于 基础

二分查找基本(当有重复元素时,位置不固定)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function binarySearch(list, target) {
if (list.length === 0) {
return -1;
}
let start = 0,
end = list.length - 1,
mid;
while (start + 1 < end) {
mid = start + Math.floor((end - start) / 2);
console.log(start, mid, end);

if (list[mid] === target) {
return mid;
}
if (list[mid] > target) {
end = mid;
} else {
start = mid;
}
if (list[start] === target) {
return start;
}
if (list[end] === target) {
return end;
}
}
}

let testlist = [0, 1, 2, 3, 3, 3, 3, 8, 13, 17, 19, 32, 42];

console.log(binarySearch(testlist, 3));

二分查找,最前、最后元素

  1. list[mid] === target时不再直接返回位置,而是继续查找
  2. 如果找last,则start= mid, 找first,则 end = mid
  3. 如果结果是[3,3,3],如果找first则先判断start,找last则先判断end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//以找last为例
function binarySearch(list, target, pos) {
if (list.length === 0) {
return -1;
}
let start = 0,
end = list.length - 1,
mid;
while (start + 1 < end) {
//最终[start,mid,end]
mid = start + Math.floor((end - start) / 2);
if (list[mid] === target) {//mid时不再直接返回
if (pos === 'last') {
start = mid; //继续找
} else if (pos === 'first') {
end = mid; //继续找
} else {
return mid;
}
} else if (list[mid] < target) {
start = mid;
} else {
end = mid;
}
}
if (list[end] === target) {//如果是找last,则先判断end,本例是last
return end;
}
if (list[start] === target) {//如果是找first,则先判断start
return start;
}
}

// let dat1 = [ 1, 1, 1, 1,2 ];
// let dat2 = [1];
// let dat3 = [1,2, 2, 2, 2, 2, 2];
// let dat4 = [1, 2, 3, 4, 5, 6];
// let dat5 = [1, 1, 1, 1, 1,2];
let testlist = [0, 1, 2, 3, 3, 3];
console.log(binarySearch(testlist, 3, 'last'));

React上下文(Context)

发表于 2018-04-10 | 分类于 基础

Context 提供了一个无需为每层组件手动添加 props,就能在组件树间进行数据传递的方法。

什么时候用

需要全局共享的,如:redux->store或者主题及当前认证的用户等

API介绍

  • 创建一个 Context 对象

    1
    const MyContext = React.createContext(defaultValue);
  • 每个 Context 对象都会返回一个 Provider React 组件,它允许消费组件订阅 context 的变化。

    1
    <MyContext.Provider value={/* 某个值 */}>
  • 消费一个Context,订阅context变更

    1
    2
    3
    <MyContext.Consumer>
    {value => /* 基于 context 值进行渲染*/}
    </MyContext.Consumer>
  • 简化context订阅,但只能订阅一个

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    class MyClass extends React.Component {
    static contextType = MyContext
    componentDidMount() {
    let value = this.context;
    /* 在组件挂载完成后,使用 MyContext 组件的值来执行一些有副作用的操作 */
    }
    componentDidUpdate() {
    let value = this.context;
    /* ... */
    }
    componentWillUnmount() {
    let value = this.context;
    /* ... */
    }
    render() {
    let value = this.context;
    /* 基于 MyContext 组件的值进行渲染 */
    }
    }
  • 消费多个 Context

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    // Theme context,默认的 theme 是 “light” 值
    const ThemeContext = React.createContext('light');

    // 用户登录 context
    const UserContext = React.createContext({
    name: 'Guest',
    });

    class App extends React.Component {
    render() {
    const {signedInUser, theme} = this.props;

    // 提供初始 context 值的 App 组件
    return (
    <ThemeContext.Provider value={theme}>
    <UserContext.Provider value={signedInUser}>
    <Layout />
    </UserContext.Provider>
    </ThemeContext.Provider>
    );
    }
    }

github add remote

发表于 2018-03-17 | 分类于 前端
  • 在github官网创建一个空respository
  • git remote add origin git@github.com:xxxxx/learngit.git和远程仓库关联
  • 本地的代码提交gaa && gci
  • git push -u origin master 提交到远程

软件开发工具-脑图

发表于 2018-03-03
1…91011…17
331502715@qq.com

331502715@qq.com

162 日志
14 分类
113 标签
© 2021 331502715@qq.com
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.4