1.找到数组的中间位置
给你一个下标从 0 开始的整数数组 nums ,请你找到 最左边 的中间位置 middleIndex
(也就是所有可能中间位置下标最小的一个)。中间位置 middleIndex 是满足 nums[0] + nums[1] + … + nums[middleIndex-1] ==
nums[middleIndex+1] + nums[middleIndex+2] + … + nums[nums.length-1]
的数组下标。如果 middleIndex == 0 ,左边部分的和定义为 0 。类似的,如果 middleIndex == nums.length -
1 ,右边部分的和定义为 0 。请你返回满足上述条件 最左边 的 middleIndex ,如果不存在这样的中间位置,请你返回 -1 。
leetcode 出处和题解,我觉得这个题解非常好,就直接用了。
https://leetcode-cn.com/problems/find-the-middle-index-in-array/solution/zhao-dao-shu-zu-de-zhong-jian-wei-zhi-by-s8cy/
1.思想
2.JS代码
var findMiddleIndex = function(nums) {
let total = nums.reduce(a, b => a+b ,0)
let sum = 0;
for (i = 0; i < nums.length; i++) {
if (total == 2 * sum + nums[i])
{
return i
}
sum += nums[i]
}
return -1
};
2.用两个栈实现一个队列。
队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
2.1 思想
1 )掌握栈的基本概念, 栈:先进后出;队列:先进先出。
2 )掌握JS数组处理方法
unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。
push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度
2.2 JS代码
// 栈:先进后出;队列:先进先出
//队列 unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。
var CQueue = function() {
this.inStack = [];
this.outStack = [];
};
// push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度
CQueue.prototype.appendTail = function(value) {
this.inStack.push(value);
};
CQueue.prototype.deleteHead = function() {
if (!this.outStack.length) {
if (!this.inStack.length) {
return -1;
}
this.in2out();
}
return this.outStack.pop();
};
CQueue.prototype.in2out = function() {
while (this.inStack.length) {
this.outStack.push(this.inStack.pop());
}
};
3.给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1: 输入:s = “()” 输出:true
示例 2: 输入:s = “()[]{}” 输出:true
示例 3: 输入:s = “(]” 输出:false
3.1 思想
到有括号的题,第一反应就要是栈
- 先为所有类型的括号做匹配,如果出现’(’ , 就把一个 “)”放入栈。
- 如果栈的长度为0 则说明没有括号,返回false
- 括号都放进栈之后,把输入的值和栈进行匹配,不相等则返回false。
3.2 JS代码
var isValid = function(s) {
const stack = [];
for (let val of s){
if(val === '('){
stack.push(')')
}
else if(val === '[')
{