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。
Comments