Ahri-珊

day6将分享LeetCode算法题155,160,167以及React打包后页面空白问题的解决方案。

LeetCode

今天的三道题涉及到数组、JS原型方法的增加以及链表的处理。

160. Intersection of Two Linked Lists

返回两个链表的尾部相交部分。

心路历程

1.判断两个链表的交点,首先要把两个链表从尾部对齐。 2.如何对齐:将两个链表中长的链表从头截断至两个链表一样长。 3.同时遍历两个链表,找到两个一模一样的节点则返回该节点。

代码:

var getIntersectionNode = function(headA, headB) {
    if (!headA || !headB) return null;
        var lenA = getLength(headA);
        var lenB = getLength(headB);
        if (lenA < lenB) {
            for (var i = 0; i < lenB - lenA; ++i) headB = headB.next;
        } else {
            for (var i = 0; i < lenA - lenB; ++i) headA = headA.next;
        }
        while (headA && headB && headA != headB) {
            headA = headA.next;
            headB = headB.next;
        }
        return (headA && headB) ? headA : null;
}
var getLength = function(head) {
        var cnt = 0;
        while (head) {
            ++cnt;
            head = head.next;
        }
        return cnt;
    };

155.Min Stack

为对象MinStack添加栈功能!

心路历程

方法1:用一个数组存放数据,需要获得最小值的时候遍历数组获得。

代码:

var MinStack = function() {
    this.nums = [];
};

/** 
 * @param {number} x
 * @return {void}
 */
MinStack.prototype.push = function(x) {
     return this.nums.push(x);
};

/**
 * @return {void}
 */
MinStack.prototype.pop = function() {
    return this.nums.pop();
};

/**
 * @return {number}
 */
MinStack.prototype.top = function() {
    return this.nums[this.nums.length-1];
};

/**
 * @return {number}
 */
MinStack.prototype.getMin = function() {
    var min = this.nums[0];
    for(var i=1;i<this.nums.length;i++)
        {
            if(this.nums[i]<min)
                min = this.nums[i];
        }
    return min;
};

方法2:用一个数组存放栈内的数,一个数组存放这个数进栈后数组的最小值。

代码:

var MinStack = function() {
    this.arr = [];
    this.min = null;
};

/** 
 * @param {number} x
 * @return {void}
 */
MinStack.prototype.push = function(x) {
    if(this.arr.length === 0){
        this.arr.push(0);
        this.min = x;
    } else{
        this.arr.push(x - this.min);
        if(x < this.min){
            this.min = x; 
        }
    }
};

/**
 * @return {void}
 */
MinStack.prototype.pop = function() {
    if(this.arr.length === 0){
        return;
    }
    var pop = this.arr.pop();
    if(pop < 0){
        this.min = this.min - pop;
    }
};

/**
 * @return {number}
 */
MinStack.prototype.top = function() {
    var top = this.arr[this.arr.length - 1];
    if(top > 0){
        return top + this.min;
    } else{
        return this.min;
    }
};

/**
 * @return {number}
 */
MinStack.prototype.getMin = function() {
    return this.min;
};

167. Two Sum II - Input array is sorted

找出有序数组中和为target的两个元素。

心路历程

我使用的最简单粗暴的方法,遍历了两遍数组,还可以采用哈希字典的方法。

代码:

var twoSum = function(numbers, target) {
    for(var i=0;i<numbers.length;i++)
        {
            for(var j=i+1;j<numbers.length;j++)
                {
                    if(numbers[i]+numbers[j]==target)
                        return [i+1,j+1];
                }
        }
    
};

React打包页面空白

昨天把React项目用Webpack打包好之后打开index.html页面空白,但可以webpack-dev-serve。找了很久终于找到了原因。

解决办法

将项目中使用的browserHistory改为hashHistory。

END