首页 > 编程语言 >js 搜索查找算法

js 搜索查找算法

时间:2024-04-17 14:11:06浏览次数:28  
标签:arr target 元素 js 算法 查找 let 哈希

  1. 线性查找
    线性查找是最简单的一种查找算法,它的基本思想是从头到尾遍历待查找的数据集,找到对应的元素,时间复杂度为O(n)。

代码实现:

function linearSearch(arr, target){
  for(let i = 0; i < arr.length; i++){
    if(arr[i] === target){
      return i;
    }
    }
    return -1;
}
  1. 二分查找
    二分查找也称为折半查找,它的基本思想是先将数据集排序,然后将数据集从中间分成两部分,如果待查找的元素小于中间值,则在左半部分继续查找,否则在右半部分继续查找,直到找到该元素或者确定该元素不存在,时间复杂度为O(logn)。

代码实现:

function binarySearch(arr, target){
  let low = 0;
  let high = arr.length - 1;
  while(low <= high){
    let mid = Math.floor((low + high) / 2);
    if(target === arr[mid]){
      return mid;
    } else if(target < arr[mid]){
      high = mid - 1;
    } else {
      low = mid + 1;
    }
  }
  return -1;
}
  1. 哈希查找
    哈希查找又称为散列查找,它的基本思想是通过哈希函数把待查找的元素映射成一个唯一的索引值,然后在该索引位置查找该元素,如果该元素不存在,返回-1。哈希查找的时间复杂度一般为O(1),但在处理哈希冲突时可能会退化为O(n)。

代码实现:

function hashSearch(arr, target){
  let hashTable = new Map();
  for(let i = 0; i < arr.length; i++){
    hashTable.set(arr[i], i);
  }
  if(hashTable.has(target)){
    return hashTable.get(target);
  } else {
    return -1;
  }
}

标签:arr,target,元素,js,算法,查找,let,哈希
From: https://www.cnblogs.com/worldforest/p/18140595

相关文章

  • KMP算法 Java实现
    Problem:28.找出字符串中第一个匹配项的下标目录解题方法思路构建next数组回溯查找复杂度Code解题方法构建next串回溯查找next串,最后下标思路通过最大前缀后缀能找到下一次未查找到后要回溯的位置构建next数组无论如何第一个数的下一次回溯位置肯定是0,因此next[......
  • Python 数据结构和算法实用指南(三)
    原文:zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d译者:飞龙协议:CCBY-NC-SA4.0第七章:哈希和符号表我们之前已经看过数组和列表,其中项目按顺序存储并通过索引号访问。索引号对计算机来说很有效。它们是整数,因此快速且易于操作。但是,它们并不总是对我们很有效......
  • Python 数据结构和算法实用指南(一)
    原文:zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d译者:飞龙协议:CCBY-NC-SA4.0前言数据结构和算法是信息技术和计算机科学工程学习中最重要的核心学科之一。本书旨在提供数据结构和算法的深入知识,以及编程实现经验。它专为初学者和中级水平的研究Python编......
  • Python 数据结构和算法实用指南(二)
    原文:zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d译者:飞龙协议:CCBY-NC-SA4.0第四章:列表和指针结构我们已经在Python中讨论了列表,它们方便而强大。通常情况下,我们使用Python内置的列表实现来存储任何数据。然而,在本章中,我们将了解列表的工作原理,并将研......
  • js带注释的冒泡排序算法
    一、简述冒泡排序(BubbleSort)是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果二者的顺序(如从大到小、首字母从A到Z)错误就交换。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法......
  • 基于Redis实现基本抢红包算法
    简介:[key,value]的缓存数据库,Redis官方性能描述非常高,所以面对高并发场景,使用Redis来克服高并发压力是一个不错的手段,本文主要基于Redis来实现基本的抢红包系统设计.发红包模块:1:发红包模块流程图如下:  用户首先输入红包金额和红包个数,然后生成当前红......
  • JS 移除对象数组中,属性值全为空的项
    constarray=[{id:1,name:'John',age:25},{id:2,name:'Alice',age:null},{id:3,name:'Bob',age:undefined},{id:4,name:'Eve',age:''},{id:5,name:'',age:......
  • vue dayjs 安装指定版本
    在Vue项目中安装指定版本的Day.js库,你可以使用npm或者yarn。以下是安装指定版本Day.js的步骤:打开终端(命令行)。转到你的Vue项目目录。执行以下命令,其中x.x.x替换为你想要安装的Day.js版本号。使用npm安装指定版本的Day.js:[email protected] 或者使用......
  • day14_我的Java学习笔记 (常用API、Lambda、常见算法)
    1.常用API1.1Date类【案例】:计算出当前时间往后走1小时121秒之后的时间是多少。1.2SimpleDateFormat【练习】:秒杀活动1.3Calendar2.JDK8新增日期类2.1概述、LocalTime/LocalDate/LocalDateTime2.2Ins......
  • 基于yolov2深度学习网络的螺丝螺母识别算法matlab仿真
    1.算法运行效果图预览 2.算法运行软件版本matlab2022a 3.算法理论概述      在工业自动化和质量控制领域,准确且高效的螺丝螺母识别至关重要。深度学习方法,特别是基于卷积神经网络(CNN)的目标检测技术,因其卓越的特征提取能力,成为解决此类问题的有效手段。YOLOv2......