0%

## php-abstract-class-and-interface

Posted on 2016-11-10 Edited on 2020-01-12 In php Views: Disqus:

## PHP抽象类和接口

- 抽象类与接口
- 抽象类内可以包含非抽象函数，即可实现函数
- 抽象类内必须包含至少一个抽象方法，抽象类和接口均不能实例化
- 抽象类可以设置访问级别，接口默认都是public
- 类可以实现多个接口但不能继承多个抽象类
- 类必须实现抽象类和接口里的抽象方法，不一定要实现抽象类的非抽象方法
- 接口内不能定义变量，但是可以定义常量

## 示例代码

    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
    <?php
    interface int1{
        const INTER1 = 111;
        function inter1();
    }
    interface int2{
        const INTER1 = 222;
        function inter2();
    }
    abstract class abst1{
        public function abstr1(){
            echo 1111;
        }
        abstract function abstra1(){
            echo 'ahahahha';
        }
    }
    abstract class abst2{
        public function abstr2(){
            echo 1111;
        }
        abstract function abstra2();
    }
    class normal1 extends abst1{
        protected function abstr2(){
            echo 222;
        }
    }

## result

    1
    2
    3
    PHP Fatal error:  Abstract function abst1::abstra1() cannot contain body in new.php on line 17

    Fatal error: Abstract function abst1::abstra1() cannot contain body in php on line 17

## summary-ranges-228

Posted on 2016-10-12 Edited on 2020-01-12 In leetcode Views: Disqus:

#### problem

Given a sorted integer array without duplicates, return the summary of its ranges.

For example, given `[0,1,2,4,5,7]`, return `["0->2","4->5","7"]`.

#### 题解

每一个区间的起点`nums[i]`加上`j`是否等于`nums[i+j]`
参考

#### Code

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    class Solution {
    public:
        vector<string> summaryRanges(vector<int>& nums) {
            int i = 0, j = 1, n;
            vector<string> res;
            n = nums.size();
            while(i < n){
                j = 1;
                while(j < n && nums[i+j] - nums[i] == j) j++;
                res.push_back(j <= 1 ? to_string(nums[i]) : to_string(nums[i]) + "->" + to_string(nums[i + j - 1]));
                i += j;
            }
            return res;
        }
    };

## minimum-size-subarray-sum-209

Posted on 2016-10-11 Edited on 2020-01-12 In leetcode Views: Disqus:

### problem

Given an array of n positive integers and a positive integer s, find the minimal length of a subarray of which the sum ≥ s. If there isn’t one, return 0 instead.

For example, given the array `[2,3,1,2,4,3]` and `s = 7`,
the subarray `[4,3]` has the minimal length under the problem constraint.

#### 题解

参考，滑动窗口，跟之前Data Structure课上的online算法有点像，链接

#### Code

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    class Solution {
    public:
        int minSubArrayLen(int s, vector<int>& nums) {
            int len = nums.size();
            if(len == 0) return 0;
            int minlen = INT_MAX;
            int sum = 0;

            int left = 0;
            int right = -1;
            while(right < len)
            {
                while(sum < s && right < len)
                    sum += nums[++right];
                if(sum >= s)
                {
                    minlen = minlen < right - left + 1 ? minlen : right - left + 1;
                    sum -= nums[left++];
                }
            }
            return minlen > len ? 0 : minlen;
        }
    };

## binary-watch

Posted on 2016-09-29 Edited on 2020-01-12 In leetcode Views: Disqus:

### problem

A binary watch has 4 LEDs on the top which represent the hours (0-11), and the 6 LEDs on the bottom represent the minutes (0-59).

Each LED represents a zero or one, with the least significant bit on the right.

For example, the above binary watch reads “3:25”.

Given a non-negative integer n which represents the number of LEDs that are currently on, return all possible times the watch could represent.

#### Example:

    1
    2
    Input: n = 1
    Return: ["1:00", "2:00", "4:00", "8:00", "0:01", "0:02", "0:04", "0:08", "0:16", "0:32"]

#### Note:

- The order of output does not matter.
- The hour must not contain a leading zero, for example “01:00” is not valid, it should be “1:00”.
- The minute must be consist of two digits and may contain a leading zero, for example “10:2” is not valid, it should be “10:02”.

### 题解

又是参（chao）考（xi）别人的代码，嗯，就是这么不要脸，链接

#### Code

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Solution {
    public:
        vector<string> readBinaryWatch(int num) {
            vector<string> res;
            for (int h = 0; h < 12; ++h) {
                for (int m = 0; m < 60; ++m) {
                    if (bitset<10>((h << 6) + m).count() == num) {
                        res.push_back(to_string(h) + (m < 10 ? ":0" : ":") + to_string(m));
                    }
                }
            }
            return res;
        }
    };

## 34_Search_for_a_Range

Posted on 2016-08-14 Edited on 2020-01-12 In leetcode Views: Disqus:

## question

### 34. Search for a Range

Original Page

Given a sorted array of integers, find the starting and ending position of a given target value.

Your algorithm’s runtime complexity must be in the order of O(log n).

If the target is not found in the array, return `[-1, -1]`.

For example,
Given `[5, 7, 7, 8, 8, 10]` and target value 8,
return `[3, 4]`.

## analysis

一开始就想到了二分查找，但是原来做二分查找的时候一般都是找到确定的那个数就完成了，
这里的情况比较特殊，需要找到整个区间，所以需要两遍查找，并且一个是找到小于target
的最大索引，一个是找到大于target的最大索引，代码参考leetcode discuss,这位仁
兄也做了详细的分析解释。

## code

    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
    class Solution {
    public:
        vector<int> searchRange(vector<int>& nums, int target) {
            vector<int> ret(2, -1);
            int i = 0, j = nums.size() - 1;
            int mid;
            while(i < j){
                mid = (i + j) / 2;
                if(nums[mid] < target) i = mid + 1;
                else j = mid;
            }
            if(nums[i] != target) return ret;
            else {
                ret[0] = i;
                if((i+1) < (nums.size() - 1) && nums[i+1] > target){
                    ret[1] = i;
                    return ret;
                }
            }   //一点小优化
            j = nums.size() - 1;
            while(i < j){
                mid = (i + j) / 2 + 1;
                if(nums[mid] > target) j = mid - 1;
                else i = mid;
            }
            ret[1] = j;
            return ret;
        }
    };

## docker-mysql-cluster

Posted on 2016-08-14 Edited on 2020-01-12 In docker Views: Disqus:

### docker-mysql-cluster

基于docker搭了个mysql集群，稍微记一下，
首先是新建mysql主库容

Read more »

## swoole-websocket-test

Posted on 2016-07-13 Edited on 2020-01-12 In php Views: Disqus:

### 玩一下swoole的websocket

WebSocket是HTML5开始提供的一种在单个TCP连接上进行全双工通讯的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455，WebSocketAPI被W3C定为标准。
,在web私信，im等应用较多。背景和优缺点可以参看wiki。

### 环境准备

因为swoole官方还不支持windows，所以需要装下linux,之前都是用ubuntu，
这次就试一下centos7，还是满好看的，虽然虚拟机会默认最小安装，需要在安装
时自己选择带gnome的，当然最小安装也是可以的，只是最后需要改下防火墙。
然后是装下PHP，Nginx什么的，我是用Oneinstack，可以按需安装
给做这个的大大点个赞。

Read more »

## invert-binary-tree

Posted on 2015-06-22 Edited on 2020-01-12 In leetcode Views: Disqus:

Invert a binary tree

         4
       /   \
      2     7
     / \   / \
    1   3 6   9

to

         4
       /   \
      7     2
     / \   / \
    9   6 3   1

Trivia:
This problem was inspired by this original tweet by Max Howell:

> Google: 90% of our engineers use the software you wrote (Homebrew),
> but you can’t invert a binary tree on a whiteboard so fuck off.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        TreeNode* invertTree(TreeNode* root) {
            if(root == NULL) return root;
            TreeNode* temp;
            temp = invertTree(root->left);
            root->left = invertTree(root->right);
            root->right = temp;
            return root;
        }
    };

## leetcode no.3

Posted on 2015-04-15 Edited on 2020-01-12 In leetcode Views: Disqus:

*Longest Substring Without Repeating Characters *

Read more »

## add-two-number

Posted on 2015-04-14 Edited on 2020-01-12 In leetcode Views: Disqus:

### problem

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

Input:`(2 -> 4 -> 3) + (5 -> 6 -> 4)`
Output: `7 -> 0 -> 8`

分析（不用英文装逼了）
这个代码是抄来的，链接原作是这位大大。

Read more »