Javascript高级—常见算法

news2024/11/15 23:16:48

大数相加问题

  function sumString(a, b){
    a = a + '';
    b = n + '';

    var arrA = a.spilt(''),
        arrB = b.spilt(''),
        distance = arrA.length - arrB.length,   // 计算两者的长度差,取最大的那个作为基准点
        len = distance > 0 ? arrA.length : arrB.length,
        carry = 0;        // 表示相加之后的进位

        // 把长度小的那个数组的前面用0补齐,让两者的位数相同
        if (distance > 0){
            for (var i = 0; i < distance; i++) {
              arrB.unshift('0');
            }
        } else {
          for (var i = 0; i < Math.abs(distance); i++) {
            arrA.unshift('0');
          }
        }

        var res = [];
        // 开始从数组的最后一位向前遍历,相同位数对应相加
        for (var i = len - 1; i >= 0; i--) {
          var temp = +arrA[i] + (+arrB[i]) + carry;
          if (temp >= 10) {
            // 6+7=13, 只需要取出最后一位
            carry = 1;
            // 先把数组转换为字符串,然后拿出来最后一位数
            res.push((temp + '')[1]);
          } else {
            carry = 0;
            res.push(temp + '');
          }
        }


        // 将数组转换为字符串输出

        return res.join('').replace(/^0/, '');
  }

URL转换为json对象

// url = ?name=zhangsan&age=18&sex=25
function getQueryObject(url){
  // 参数校验
  url = url == null ? window.location.href : url;
  var search = url.substring(url.lastIndexOf('?') + 1);
  // 开始进行字符串解析name=zhangsan&age=18&sex=25
  // +代表匹配一个或多个,零个肯定是不行的。*代表0个或多个,这里value没有是允许的。那么这里要注意的就是^在单独使用时,代表以什么开头,在中括号里面使用代表不包含的意思
  // 中括号里面的内容相当于是或的意思:表示除了?,&,=这三个字符以外的其他所有字符
  var reg = /([^?&=]+)=([^?&=]*)/g;
  var obj = {};
  // 其中res表示匹配成功的字符串序列,$1,表示第一个()内所匹配的内容,$2为第二个,依次类推。当我们使用全局匹配时,只要匹配成功的子串最后都会执行一遍function函数
  search.replace(reg, function(res, $1, $2){
    // name=zhangsan,age=18,sex=male
    console.log(res, $1, $2);
    obj[$1] = $2;
  });
  return obj;
}

JSON转换为URL?

 // data={name : 'zhangsan', age : 'lisi'}
  function parseParams(data){
    var key, i, value, tempArr = [];
    for (i in data) {
      key = encodeURIComponent(i);
      value = encodeURIComponent(data[i]);
      tempArr.push(key + '=' + value);
    }
    return tempArr.join('&');
  }

使用两个数组实现一个定长的队列?

JS先奇数后偶数排序

  // v1. 分开写的实现思路
  function sortArray(arr){
    arr.sort((a, b) => {
      // 1. 先把奇数放在前面,把偶数放在后面
      if (a % 2 === 0 && b % 2 === 1) {
        // 如果前面的元素是奇数的话,而且后面的元素是偶数的话,就去交换
        return 1;
      }
    })
    arr.sort((a, b) => {
      // 1. 把前面的那部分奇数,和后面的那部分偶数按照从小到大的顺序排序
      if (a > b && (a % 2 === 1 && b % 2 === 1)) {
        return 1;
      }
      if (a > b && (a % 2 === 0 && b % 2 === 1)) {
        return 1;
      }
    });
  }

  // v2. 代码优化版本
  function sortArray(arr){
    arr.sort((a, b) => {
      if (a % 2 === 0 && b % 2 === 1) {
        return 1;
      }
      if (a > b && (a % 2 === 1 && b % 2 === 1) || (a % 2 === 0 && b % 2 === 1)) {
        return 1;
      }

    });
  }

求数组最长递增子序列长度

/**
 * 求数组最长递增子序列
 * @param arr
 */
function getMaxSequenceNumbers(arr){
    let res = [];
    res.push(arr[0])
    for (let i = 1, len = arr.length; i < len; i++) {
        // 开始处理res
        if (arr[i] > res[res.length - 1]) {
            res.push(arr[i]);
        }
        else {
            // 小于等于的话
            // 需要在res中找到第一个大于arr[i]的元素,然后替换掉这个元素(二分查找)
            let index = binarySearch(res, arr[i]);
            if (index) {
                res[index] = arr[i];
            }
        }
    }

    return res.length;
}

function binarySearch(arr, val) {
    let l = 0, r = arr.length - 1;
    while (l <= r) {
        let mid = Math.floor(l + (r - l) / 2);
        if (val < arr[mid]) {
            r = mid - 1;
        }
        else if (val > arr[mid]) {
            l = mid + 1;
        }
    }

    // 最终的l就是找到的结果,arr中第一个大于val的元素位置
    return l;
}


console.log(getMaxSequenceNumbers([5, 6, 7, 1, 2, 8]));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2241124.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

javaWeb小白项目--学生宿舍管理系统

目录 一、检查并关闭占用端口的进程 二、修改 Tomcat 的端口配置 三、重新启动 Tomcat 一、javaw.exe的作用 二、结束javaw.exe任务的影响 三、如何判断是否可以结束 结尾&#xff1a; 这个错误提示表明在本地启动 Tomcat v9.0 服务器时遇到了问题&#xff0c;原因是所需…

深度学习在边缘检测中的应用及代码分析

摘要&#xff1a; 本文深入探讨了深度学习在边缘检测领域的应用。首先介绍了边缘检测的基本概念和传统方法的局限性&#xff0c;然后详细阐述了基于深度学习的边缘检测模型&#xff0c;包括其网络结构、训练方法和优势。文中分析了不同的深度学习架构在边缘检测中的性能表现&am…

SpringBoot(十七)创建多模块Springboot项目

在gitee上查找资料的时候,发现有不少Springboot项目里边都是嵌套了多个Springboot项目的。这个玩意好,在协作开发的时候,将项目分成多个模块,有多个团队协作开发,模块间定义标准化通信接口进行数据交互即可。 这个好这个。我之前创建的博客项目是单模块的SpringBoot项目,…

STM32WB55RG开发(2)----STM32CubeProgrammer烧录

STM32WB55RG开发----2.STM32CubeProgrammer烧录 概述硬件准备视频教学样品申请源码下载参考程序自举模式UART烧录USB烧录 概述 STM32CubeProgrammer (STM32CubeProg) 是一款用于编程STM32产品的全功能多操作系统软件工具。 它提供了一个易用高效的环境&#xff0c;通过调试接口…

使用Java爬虫获取商品订单详情:从API到数据存储

在电子商务日益发展的今天&#xff0c;获取商品订单详情成为了许多开发者和数据分析师的需求。无论是为了分析用户行为&#xff0c;还是为了优化库存管理&#xff0c;订单数据的获取都是至关重要的。本文将详细介绍如何使用Java编写爬虫&#xff0c;通过API获取商品订单详情&am…

高性能分布式缓存Redis-分布式锁与布隆过滤器

一、分布式锁 我们先来看一下本地锁 在并发编程中&#xff0c;我们通过锁&#xff0c;来避免由于竞争而造成的数据不一致问题。通常&#xff0c;我们以 synchronized 、Lock 来使用它&#xff08;单机情况&#xff09; 来看这段代码 Autowired RedisTemplate<String,Str…

SpringSecurity+jwt+captcha登录认证授权总结

SpringSecurityjwtcaptcha登录认证授权总结 版本信息&#xff1a; springboot 3.2.0、springSecurity 6.2.0、mybatis-plus 3.5.5 认证授权思路和流程&#xff1a; 未携带token&#xff0c;访问登录接口&#xff1a; 1、用户登录携带账号密码 2、请求到达自定义Filter&am…

从社交媒体到元宇宙:Facebook未来发展新方向

Facebook&#xff0c;作为全球最大的社交媒体平台之一&#xff0c;已经从最初的简单互动工具发展成为一个跨越多个领域的科技巨头。无论是连接人与人之间的社交纽带&#xff0c;还是利用大数据、人工智能等技术为用户提供个性化的体验&#xff0c;Facebook一直引领着社交网络的…

javascript用来干嘛的?赋予网站灵魂的语言

javascript用来干嘛的&#xff1f;赋予网站灵魂的语言 在互联网世界中&#xff0c;你所浏览的每一个网页&#xff0c;背后都有一群默默工作的代码在支撑着。而其中&#xff0c;JavaScript就像是一位技艺精湛的魔术师&#xff0c;它赋予了网页生命力&#xff0c;让原本静态的页…

Wordpress常用配置,包括看板娘跨域等

一个Wordpress的博客已经搭建完成了&#xff0c;那么为了让它看起来更有人间烟火气一点&#xff0c;有一些常用的初始配置&#xff0c;这里整理一下。 修改页脚 页脚这里默认会显示Powered by Wordpress&#xff0c;还有一个原因是这里要加上备案信息。在主题里找到页脚&…

The Internals of PostgreSQL 翻译版 持续更新...

为了方便自己快速学习&#xff0c;整理了翻译版本&#xff0c;目前翻译的还不完善&#xff0c;后续会边学习边完善。 文档用于自己快速参考&#xff0c;会持续修正&#xff0c;能力有限,无法确保正确!!! 《The Internals of PostgreSQL 》 不是 《 PostgreSQL14 Internals 》…

FlinkPipelineComposer 详解

FlinkPipelineComposer 详解 原文 背景 在flink-cdc 3.0中引入了pipeline机制&#xff0c;提供了除Datastream api/flink sql以外的一种方式定义flink 任务 通过提供一个yaml文件&#xff0c;描述source sink transform等主要信息 由FlinkPipelineComposer解析&#xff0c…

MybatisPlus知识

mybatis与mybatisplus的区别&#xff1a; mybatisplus顾名思义时mybatis的升级版&#xff0c;提供了更多的API和方法&#xff0c;是基于mybatis框架基础上的升级&#xff0c;更加方便开发。mybatisplus继承BaseMapper接口并调用其中提供的方法来操作数据库&#xff0c;不需要再…

利用飞书多维表格自动发布版本

文章目录 背景尝试1&#xff0c;轮询尝试2&#xff0c;长连接 背景 博主所在的部门比较奇特&#xff0c;每个车型每周都需要发版&#xff0c;所以实际上一周会发布好几个版本。经过之前使用流水线自动发版改造之后&#xff0c;发版的成本已经大大降低了&#xff0c;具体参考&a…

Qwen2-VL:发票数据提取、视频聊天和使用 PDF 的多模态 RAG 的实践指南

概述 随着人工智能技术的迅猛发展&#xff0c;多模态模型在各类应用场景中展现出强大的潜力和广泛的适用性。Qwen2-VL 作为最新一代的多模态大模型&#xff0c;融合了视觉与语言处理能力&#xff0c;旨在提升复杂任务的执行效率和准确性。本指南聚焦于 Qwen2-VL 在三个关键领域…

蓝桥杯每日真题 - 第7天

题目&#xff1a;&#xff08;爬山&#xff09; 题目描述&#xff08;X届 C&C B组X题&#xff09; 解题思路&#xff1a; 前缀和构造&#xff1a;为了高效地计算子数组的和&#xff0c;我们可以先构造前缀和数组 a&#xff0c;其中 a[i] 表示从第 1 个元素到第 i 个元素的…

家政服务小程序,家政行业数字化发展下的优势

今年以来&#xff0c;家政市场需求持续增长&#xff0c;市场规模达到了万亿级别&#xff0c;家政服务行业成为了热门行业之一&#xff01; 家政服务种类目前逐渐呈现了多样化&#xff0c;月嫂、保姆、做饭保洁、收纳、维修等家政种类不断出现&#xff0c;满足了居民日益增长的…

蓝桥杯每日真题 - 第12天

题目&#xff1a;&#xff08;数三角&#xff09; 题目描述&#xff08;14届 C&C B组E题&#xff09; 解题思路&#xff1a; 给定 n 个点的坐标&#xff0c;计算其中可以组成 等腰三角形 的三点组合数量。 核心条件&#xff1a;等腰三角形的定义是三角形的三条边中至少有…

Linux系统下svn新建目录

Linux安装svn自行查找 新建目录 新建一个自定义库的文件夹&#xff1a;mkdir security 使用svnadmin命令在新创建的目录中创建一个新的SVN版本库。例如&#xff1a; svnadmin create security 执行完成以上命令就会生成默认配置文件 通过pwd命令查找当前目录路径 路径&…

SpringCloud基础 入门级 学习SpringCloud 超详细(简单通俗易懂)

Spring Cloud 基础入门级学习 超详细&#xff08;简单通俗易懂&#xff09; 一、SpringCloud核心组件第一代&#xff1a;SpringCloud Netflix组件第二代&#xff1a;SpringCloud Alibaba组件SpringCloud原生组件 二、SpringCloud体系架构图三、理解分布式与集群分布式集群 四、…