先来看一道题
1 和为s的连续正整数
- 题目分析:对于整道题可以理解了为在数组[1,2,3… (target + 1) / 2] 中寻找子数组和为target,由于至少需要两个数 (n + (n-1))<= target, 所以n = (target + 1)/ 2。
- 方法:采用双指针
var findContinuousSequence = function(target) {
let res = [];
let left = 1;
let right = 1;
let sum = 1;
while (left <= Math.ceil(target / 2)) {
// 等于就加入子数组
if (sum == target) {
let cur = [];
// 子数组的左右边界
for (let i = left; i <= right; i++) {
cur.push(i);
}
res.push(cur);
sum -= left;
left++;
// 大于就移动左指针
} else if (sum > target) {
sum -= left;
left++;
// 小于就移动右指针
} else {
right++;
sum += right;
}
}
return res;
};
2.接下来来看一下js里的数组对象
- 在js里的数组和C,C++,Java的数组有一定的区别,js的数组就是一个对象,可以当作数组对象,也可以当作队列对象,甚至可以当作哈希表。
(1)当作数组
var arr = [1, 2, 3];
(2) 当作栈 (先进后出)
var stack = new Array();
// 入栈
stack.push(1);
stack.push(2);
// 出栈
stack.pop();// 弹出的是2
(3)当作队列 (先进先出)
var queue = new Array();
// 入队
queue.push(1);
queue.push(2);
// 出队
queue.shift(); // 弹出的1
(4) 当作哈希表 (key-value)
var map = new Array();
map["name"] = zhulin;
map["age"] = 25;
console.log(map["name"]);