JS算法(三)

本文介绍了9个使用JavaScript实现的算法问题,包括找到数组中间位置、用栈实现队列、括号的有效性检查、合并升序链表、生成有效括号、最长回文子串、查找首次出现的字符、二分查找、目标值在排序数组中的位置以及查找目标值的开始和结束位置。每个问题都包含了思路和JS代码实现。
摘要由CSDN通过智能技术生成

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 思想

到有括号的题,第一反应就要是栈
  1. 先为所有类型的括号做匹配,如果出现’(’ , 就把一个 “)”放入栈。
  2. 如果栈的长度为0 则说明没有括号,返回false
  3. 括号都放进栈之后,把输入的值和栈进行匹配,不相等则返回false。

3.2 JS代码

var isValid = function(s) {
   

const stack = [];
 

 for (let val of s){
   
     if(val === '('){
   
         stack.push(')')
     }
     else if(val === '[')
     {
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值