IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> JavaScript算法题总结(二)二分查找/排序 -> 正文阅读

[数据结构与算法]JavaScript算法题总结(二)二分查找/排序

BM17 二分查找-I

在这里插入图片描述

 /* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums int整型一维数组 
 * @param target int整型 
 * @return int整型
 */
function search( nums ,  target ) {
    // write code here
    let len = nums.length;
    if(!len)return -1;
    let [left , right] = [0 , len -1];
    while(left <= right){
        let mid = left + Math.floor((right - left) /2);
        let num = nums[mid];
        if(num === target) return mid;
        else if(num > target) right = mid - 1;
        else left = mid +1;
        
    }
    return -1;
}
module.exports = {
    search : search
};

BM18 二维数组中的查找

在这里插入图片描述

function Find(target, array)
{
  //判断数组是否为空
  let m = array.length;
  if(m == 0)  return false;
  
  let n = array[0].length;
  if(n == 0)  return false;
  
  let i=0, j=n-1;//右上角元素
  while(i<m && j>=0){
    if(target < array[i][j]){
      j--;
    }else if(target > array[i][j]){
      i++;
    }else{
      return true;
    }
  }
  return false;
}
module.exports = {
    Find : Find
};

BM19 寻找峰值

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums int整型一维数组 
 * @return int整型
 */
function findPeakElement( nums ) {
    // write code here
    let [left,right]=[0,nums.length-1];
    while(left<right){
        let mid = left + Math.floor((right - left) / 2)
        if(nums[mid]<nums[mid+1])
            left=mid+1;
        else
            right=mid;
    }
    return left
}
module.exports = {
    findPeakElement : findPeakElement
};

BM20 数组中的逆序对

在这里插入图片描述

let countReverse = 0;
const kmod = 1000000007;
function InversePairs(data)
{    
    mergeSort(data);
    return countReverse;
}

//归并排序
function mergeSort(arr, len = arr.length){
    const mid = Math.floor(len/2);
    if(len <= 1){
        return arr;
    }
    const left = mergeSort(arr.slice(0 , mid))
    const right = mergeSort(arr.slice(mid , len))
    console.log("left , right",left , right)
    const res = mergeOrderly(left,right);
    console.log("res",res)
    return res;
}

//合并子序列,累加逆序对
function mergeOrderly(left,right){
    let i = 0, j = 0;
    let newList = [];
    if(!left || !right){
        return; 
    }
    while (i < left.length && j < right.length){
        if(left[i] > right [j]){
            countReverse += left.length - i;
            countReverse %= kmod;
            newList.push(right [j]);
            j++;
        }else{
            newList.push(left [i]);
            i++;  
        }
    }
    if(i < left.length){
        newList = newList.concat(left.slice(i,left.length))
    }else{
        newList = newList.concat(right.slice(j,right.length))
    }
    return newList;
}
module.exports = {
    InversePairs : InversePairs
};

BM21 旋转数组的最小数字

在这里插入图片描述

function minNumberInRotateArray(rotateArray)
{
  let left = 0, right = rotateArray.length-1;
    
  while(left < right){
    let mid = Math.floor( (left + right)/2 );
    //旋转点在右侧
    if(rotateArray[mid] < rotateArray[right]){
      right = mid;
    }
    //旋转点在左侧
    else if(rotateArray[mid] > rotateArray[right]){
      left = mid+1;
    }
    //缩小判断范围
    else{
      right--;
    }
  }
  return rotateArray[left];
}
module.exports = {
    minNumberInRotateArray : minNumberInRotateArray
};

BM22 比较版本号

在这里插入图片描述
在这里插入图片描述

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 比较版本号
 * @param version1 string字符串 
 * @param version2 string字符串 
 * @return int整型
 */
function compare( version1 ,  version2 ) {
    // write code here
    let arr1=version1.split('.');
    let arr2=version2.split('.');
    let i=0;
    while(i<arr1.length||i<arr2.length){
         let x=0,y=0;
        if(i<arr1.length) x=parseInt(arr1[i]);
        if(i<arr2.length) y=parseInt(arr2[i]);
        if(x>y) return 1;
        if(x<y) return -1;
        i++;
    }
    return 0;
}
module.exports = {
    compare : compare
};
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-10 12:08:32  更:2022-05-10 12:09:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:33:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码