回温js算法

---恢复内容开始---

一,冒泡排序。

  具体算法描述如下:

    <1>.比较相邻的元素。如果第一个比第二个大,就交换它们两个;

    <2>.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;

    <3>.针对所有的元素重复以上的步骤,除了最后一个;

    <4>.重复步骤1~3,直到排序完成。

  代码实现

let arr = [9, 10, 8, 7, 5, 4, 2, 1, 3, 6];

      function sort(arr) {
        var as = [].concat(arr), len = arr.length, count = 0;
        for (let i = 0; i < len-1; i++) {
          for (let j = 0; j < len-1-i; j++) {
            if(as[j]>as[j+1]){
              var item = as[j];
              as[j] = as[j+1];
              as[j+1] = item;
              count++;
            }
          }
        }
        console.log(count)
        return as
      }
      console.log(sort(arr))

结果:

count:37
arr:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

二,选择排序。

  描述:

    在时间复杂度上表现最稳定的排序算法之一,因为无论什么数据进去都是O(n²)的时间复杂度。。。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。

  实现:

let arr = [9, 10, 8, 7, 5, 4, 2, 1, 3, 6];

      function sort(arr) {
        var as = [].concat(arr), len = arr.length, count = 0, minNum, item;
        for (let i = 0; i < len-1; i++) {
          minNum = i;
          for (let j = i+1; j < len; j++) {
            if(as[minNum] > as[j]){
              minNum = j;
              count++
            }
          }
          item = as[i];
          as[i] = as[minNum];
          as[minNum] = item;
        }
        console.log(count)
        return as
      }
      console.log(sort(arr))

三,插入排序。

  描述:插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

  实现:

let arr = [9, 10, 8, 7, 5, 4, 2, 1, 3, 6];

      function sort(arr) {
        var as = [].concat(arr), len = arr.length, count = 0, preIndex, item;
        for (let i = 1; i < len; i++) {
          preIndex = i-1;
          item = as[i];
          while(preIndex >= 0 && as[preIndex] > item){
            as[preIndex+1] = as[preIndex]
            preIndex-- ;
            count++;
          }
          as[preIndex+1] = item
        }
        console.log(count)
        return as
      }
      console.log(sort(arr))

四,希尔排序。

  描述:希尔排序本质上是一种插入排序,但是对数列进行了等间隔分组处理,在每一组中做插入排序,这一优化使得原本 O(n^2) 的时间复杂度一下降为 O(nlogn)

  实现:

 

let arr = [9, 10, 8, 7, 5, 4, 2, 1, 3, 6];
        function shellsort(arr) {
          for (let gap = Math.floor(arr.length/2); gap > 0; gap = Math.floor(gap/2)) {
            for (let i = gap; i < arr.length; i++) {
              let item = arr[i];
              let j = i-1;
              while (j>=0 && arr[j] > item) {
                arr[j+1] =  arr[j];
                j--;
              }
              arr[j+1] = item;
              
            }
          }
        }
        console.log(shellsort(arr));

五,归并排序。

        let arr = [9, 10, 8, 7, 5, 4, 2, 1, 3, 6];
        function mergeSort(arr) {
          if (arr.length<2) {
            return arr
          }
          let middle =parseInt(arr.length/2);
          let left = arr.slice(0,middle);
          let right = arr.slice(middle);
          if(left.length =='undefined' && right.length == 'undefined'){
            return false
          }
          return merge(mergeSort(left),mergeSort(right))
        }

        function merge(left,right) {
          let result= [];
          
          while (left.length && right.length) {
            if(left[0]<= right[0]){
              result.push(left.shift())
            }else{
              result.push(right.shift())
            }
          }
          while (left.length) {
            result.push(left.shift())
          }
          while (right.length) {
            result.push(right.shift())
          }
          return result
        } 
        console.log(mergeSort(arr));

六,快速排序。

 let arr = [9, 10, 8, 7, 5, 4, 2, 1, 3, 6];
        function quickSort(arr) {
          if(arr.length<=1){
            return arr
          }
          let middle = Math.floor(arr.length/2);
          let povid = arr.splice(middle,1)[0];
          let left = [];
          let right = [];
          for (let i = 0; i < arr.length; i++) {
            if(arr[i] < povid){
              left.push(arr[i])
            }else {
              right.push(arr[i])
            }
          }
          return quickSort(left).concat([povid],quickSort(right))
        }
        console.log(quickSort(arr))

七,堆排序。

//调整函数
        function headAdjust(elements, pos, len){
          //将当前节点值进行保存
          var swap = elements[pos];

          //定位到当前节点的左边的子节点
          var child = pos * 2 + 1;

          //递归,直至没有子节点为止
          while(child < len){
            //如果当前节点有右边的子节点,并且右子节点较大的场合,采用右子节点
            //和当前节点进行比较
            if(child + 1 < len && elements[child] < elements[child + 1]){
              child += 1;
            }

            //比较当前节点和最大的子节点,小于则进行值交换,交换后将当前节点定位
            //于子节点上
            if(elements[pos] < elements[child]){
              elements[pos] = elements[child];
              pos = child;
              child = pos * 2 + 1;
            }
            else{
              break;
            }

            elements[pos] = swap;
          }
        }

        //构建堆
        function buildHeap(elements){
          //从最后一个拥有子节点的节点开始,将该节点连同其子节点进行比较,
          //将最大的数交换与该节点,交换后,再依次向前节点进行相同交换处理,
          //直至构建出大顶堆(升序为大顶,降序为小顶)
          for(var i=elements.length/2; i>=0; i--){
            headAdjust(elements, i, elements.length);
          }
        }

        function sort(elements){
          //构建堆
          buildHeap(elements);

          //从数列的尾部开始进行调整
          for(var i=elements.length-1; i>0; i--){
            //堆顶永远是最大元素,故,将堆顶和尾部元素交换,将
            //最大元素保存于尾部,并且不参与后面的调整
            var swap = elements[i];
            elements[i] = elements[0];
            elements[0] = swap;

            //进行调整,将最大)元素调整至堆顶
            headAdjust(elements, 0, i);
          }
        }

        var elements = [3, 1, 5, 7, 2, 4, 9, 6, 10, 8];
        
        sort(elements);
        console.log(elements);

八,计数排序。

       function countingSort(array) {
        let len = array.length,B = [],C = [],min = array[0], max = array[0];
        for (var i = 0; i < len; i++) {
          min = min <= array[i] ? min : array[i];
          max = max >= array[i] ? max : array[i];
          C[array[i]] = C[array[i]] ? C[array[i]] + 1 : 1;
        }

        // 计算排序后的元素下标
        for (var j = min; j < max; j++) {
          C[j + 1] = (C[j + 1] || 0) + (C[j] || 0);
        }
        for (var k = len - 1; k >= 0; k--) {
          B[C[array[k]] - 1] = array[k];
          C[array[k]]--;
        }
        return B;
      }
        var elements = [3, 1, 5, 7, 2, 4, 9, 6, 10, 8];
        
        console.log(countingSort(elements));

九,桶排序。

//  @param array 数组
      // @param num 桶的数量
      function bucketSort(array, num) {
      if (array.length <= 1) {
        return array;
      }
      var len = array.length, buckets = [], result = [], min =array[0], max =array[0] , space, n = 0;

      var index = Math.floor(len / num) ;
      while(index<2){

        num--;
        index = Math.floor(len / num) ;
      }

      for (var i = 1; i < len; i++) {
        min = min <= array[i] ? min : array[i];
        max = max >= array[i] ? max : array[i];
      }
      space = (max - min + 1) / num;  //步长
      for (var j = 0; j < len; j++) {
        var index = Math.floor((array[j] - min) / space);
        if (buckets[index]) { // 非空桶,插入排序
          var k = buckets[index].length - 1;
          while (k >= 0 && buckets[index][k] > array[j]) {
            buckets[index][k + 1] = buckets[index][k];
            k--;
          }
          buckets[index][k + 1] = array[j];
        } else { //空桶,初始化
          buckets[index] = [];
          buckets[index].push(array[j]);
        }
      }
      while (n < num) {
        result = result.concat(buckets[n]);
        n++;
      }
      return result;
      }
      var elements = [3, 1, 5, 7, 2, 4, 9, 6, 10, 8];
      
      console.log(bucketSort(elements,4));

十,基数排序。

/**
* 基数排序适用于:
* (1)数据范围较小,建议在小于1000
* (2)每个数值都要大于等于0
* @author damonare
* @param arr 待排序数组
* @param maxDigit 最大位数
*/
//LSD Radix Sort
 
      function radixSort(arr, maxDigit) {
        var mod = 10;
        var dev = 1;
        var counter = [];
        console.time('基数排序耗时');
        for (var i = 0; i < maxDigit; i++, dev *= 10, mod *= 10) {
          for(var j = 0; j < arr.length; j++) {
            var bucket = parseInt((arr[j] % mod) / dev);
            if(counter[bucket]== null) {
              counter[bucket] = [];
            }
          counter[bucket].push(arr[j]);
          }
          var pos = 0;
          for(var j = 0; j < counter.length; j++) {
            var value = null;
            if(counter[j]!=null) {
              while ((value = counter[j].shift()) != null) {
                arr[pos++] = value;
              }
            }
          }
        }
        console.timeEnd('基数排序耗时');
        return arr;
      }
      var elements = [3, 1, 5, 7, 2, 4, 9, 6, 10, 8];
      
      console.log(radixSort(elements,2));

转载于:https://www.cnblogs.com/webPang/p/10790830.html

Python内置函数zip()——《Python内置函数手册》Python老吕编著 zip()函数是 Python 中的一个内置函数,用于将多个可迭代对象(如列表、元组、字符串等)中对应的元素打包成一个个元组,然后返回由这些元组组成的迭代器。zip()函数常用于将多个序列并行迭代,或者用于数据对齐。zip()它返回一个迭代器,这意味着你可以逐个获取打包后的元素,而不是一次性将所有元素加载到内存中。如果输入的可迭代对象长度不一致,zip()会以最短的可迭代对象为准,只打包到最短对象的末尾。它可以用来并行迭代多个序列,使得代码更加简洁和高效。在接下来的章节中,我们将详细介绍。 阅读详情

相关推荐

浅谈一下小波变换和EEG信号处理

浅谈小波变换,总结不是很到位,请大家指正。

qq_45045249的博客 2864

JS-冒泡排序

回温一下 JavaScript中的冒泡排序 原理:依次比较相邻的两个值,如果后面的比前面的小,则将小的元素排到前面。依照这个规则进行多次并且递减的迭代,直到顺序正确。 时间复杂度,空间复杂度,稳定性:时间复杂度 指的是一个算法执行所耗费的时间空间复杂度 指运行完一个程序所需内存的大小稳定 指如果a=b,a在b的前面,排序后a仍然在b的前面,不稳定指,如果a=b,a在b的前面,排序后可能会交换位...

weixin_30408165的博客 95

机器学习入门指南:Jupyter Notebook实战

对于机器学习工程师而言,他们更擅长的是算法、模型、数据探索的工作,而对于工程化的能力则并不是其擅长的工作。Jupyter Notebook生成PMML文件1​​​​​​​。Jupyter Notebook生成PMML文件2​​​​​​​。PySpark Notebook建模 -折线图​​​​​​​。TensorFlowNotebook建模​​​​​​​。R Notebook建模 - 散点图​​​​​​​。PySpark Notebook建模​​​​​​​。R Notebook获取训练数据集​​​​​​​。

datacreating的博客 1975

模拟退火算法:从物理退火到全局优化的启发式搜索实践

在优化领域,启发式算法是解决复杂组合优化和函数优化问题的关键技术。其核心原理在于通过模拟自然或物理过程,在庞大的解空间中进行高效搜索,以平衡探索与利用。模拟退火算法正是这一思想的杰出代表,它借鉴了金属退火的物理过程,通过Metropolis准则以概率方式接受劣质解,从而有效跳出局部最优陷阱,增强全局搜索能力。该算法在旅行商问题、调度优化、背包问题等NP-hard场景中展现出巨大技术价值,尤其适用于解空间结构复杂、传统梯度方法易失效的场合。本文以模拟退火为例,深入剖析其参数调优、邻域设计等工程实践要点,为数学

weixin_34326429的博客 466

Windows 游戏 EXCEPTION_ACCESS_VIOLATION 修复:3类硬件问题与5步软件排查法

本文提供Windows游戏EXCEPTION_ACCESS_VIOLATION错误的终极修复指南,涵盖3类硬件问题(内存故障、显卡问题、超频不稳定)和5步软件排查法(文件验证、驱动更新、DEP调整等),帮助玩家彻底解决0xFFFFFFFFFFFFFFFF内存访问冲突问题。

weixin_31856057的博客 2456

ClickHouse的bitmap使用

ClickHouse的bitmap使用 bitmap的基本使用 在CK中bitmap有两种构建方式,在ClickHouse的官网有说明: (1)一个是由聚合函数groupBitmapState构造的, (2)另一个是由Array Object构造的。同时还可以将位图对象转化为数组对象。 bitmap实战 数据和基本数据表准备 创建一张基本表,一个用户表,有多个描述的维度,每个维度由该维度的唯一id。 CREATE TABLE test02(id UInt16, tag1 UInt8, tag2 UInt8,

zg_hover的专栏 5654

GitHub热榜技术解析:AI工具链、Rust全栈与分布式数据库新趋势

开源社区的技术演进始终围绕效率提升与架构革新展开。从编译器原理到分布式系统设计,开发者工具链正经历AI深度改造的范式转移。以Rust为代表的现代语言通过所有权模型实现内存安全与高性能的平衡,而Zig等新兴语言则在系统编程领域展现出独特优势。这些技术通过GitHub等平台快速传播,形成包括AI代码助手Copilot++、全栈框架Rustic和分布式协调器OrchestraDB在内的典型解决方案。在工程实践中,WASM编译优化、多云数据库同步等场景尤其值得关注,它们直接解决了边缘计算场景下的性能瓶颈问题。当前热

weixin_30480075的博客 397

保姆级教程:用rosbag录制和回放你的第一个ROS机器人数据(附C++/Python代码)

本文提供了一份详细的ROS机器人数据录制与回放教程,涵盖从命令行操作到C++/Python编程实现的全流程。通过rosbag工具,开发者可以高效记录和回放机器人运行时的传感器数据和控制指令,适用于故障复现、算法调试等多种场景。教程还包含高级技巧如时间同步和大文件处理,帮助用户快速掌握ROS数据管理核心技能。

weixin_29313239的博客 285

福利 | 2018 年,程序员全新的技术之路

点击上方“优快云”,选择“置顶公众号”关键时刻,第一时间送达!年年岁岁花相似,岁岁年年人不同。新年伊始,看着朋友圈各种年终总结、新年新的 KPI,你是否会有些不同的感觉?作为互联网中的一名程序员,先回顾一下 2017 年技术发展的整体趋势。看家利器之编程语言。现如今年事已高的 Java 依然是不可撼动的霸主、新贵 Python 因人工智能的爆发使用率飙升、被谷歌拥抱的 Kotlin 成为 And

优快云资讯 5176

pgpool-II踩坑日记两则

最近结合pgpool-II进行postgreSQL高可用的部署,过程非常煎熬,作为新手,公司也没有前辈熟悉postgreSQL,只能自己摸索。好在已经搞明白了,把困扰我很长时间的两个问题分享一下。 1. show pool_nodes 第一个问题就是 show pool_nodes 的使用,照着教程建好后,在哪里执行这个指令呢?我在pg服务器上怎么执行这个指令都显示 ERROR: unrecognized configuration parameter "pool_nodes",一度怀疑人生。翻阅了很多资料

zhaizhai6_6的博客 4540

AI编码的“黑箱危机”终结者:OpenSpec如何让你的代码从“猜谜”变“契约”?

OpenSpec的真正价值,在于它将AI编码从"经验驱动"推向"契约驱动"——当人类与AI对"目标是什么"达成显式共识,编码就从"猜谜游戏"变成了"工程实现"。这种转变不仅提升效率,更重塑了开发者与AI的关系:AI从"替代者"回归"协作者",而人类则聚焦于"定义正确的事"而非"正确地做事"。对于开发者,OpenSpec提供了驾驭AI的缰绳;对于团队,它构建了协作的基石;对于行业,它预示着AI编码工业化的开端。

haolove527的专栏 1349

Vibe Coding:7步情绪-代码协同开发系统

Vibe Coding 是一种将开发者生理状态与编码行为深度耦合的新型开发范式,其核心在于把情绪、心率变异度(HRV)、指尖温度等生物信号作为第一类开发资源进行管理。它并非编程技巧或框架教学,而是通过可量化的‘情绪状态跟踪’与‘代码节奏’设计,解决90%工程师面临的‘启动失败’问题——即打开编辑器前的焦虑与认知阻滞。该方法融合神经科学原理与前端工程实践,强调低摩擦开发体验,适用于自由职业者、碎片化时间工作者及中年技术人。文中详述的7步工作流(Vibe Scan→Anchor Reset→Scope Lock

weixin_30252709的博客 322

EndNote导入文献出现带有大括号{}乱码的解决办法

进入word中的Endnote工具栏——Bibliography Preferences(位于Bibliography区块的右下角),就是那个输入杂志名的小三角形,在Temporary citation delimiters处修改变量的默认符号。将默认的大括号{}修改为文章中不回使用到的符号。原因:因为Endnote插入的参考文献在Word中的代码就是以大括号隔开的,当文章中出现了该符号,endnote就会自动比对Library中的书目,而此时endnote出现错误。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 4万+

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 323

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 369

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 598

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java 集合容器高频面试题全解:HashMap 树化阈值、1.7 死循环与 ConcurrentHashMap 演进(2026 招聘 JD 真题复盘)

HashMap 树化阈值 8 的泊松分布依据、退化阈值 6 的防抖设计、JDK 1.7 头插成环死循环的排查与修复、1.8 尾插后为何仍线程不安全、ConcurrentHashMap 放弃分段锁的原因与 ForwardingNode 协作扩容、computeIfAbsent 死锁陷阱、大集合找重复的场景题选型,附三层追问链自测。题目来源为 38 期公开招聘 JD 样本与字节、拼多多、建行、美团、快手公开面经。

蒙眼过河 412

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 23

26-下载中心按哈希分目录存文件

为解决大导出文件存储的扩展性与一致性问题,采用哈希分目录策略:以任务 key 前四位划分为两级子目录,结合安全文件名构建路径(如 a3/f9/a3f9c2e1..._orders.xlsx),实现文件分散存储。业务库仅保存任务状态与 key,下载中心通过内网接口接收文件流并管理持久化,支持无状态扩容。配合内存索引与定期清理作业,确保元数据与文件一致。该方案有效避免单目录膨胀、提升性能,并通过共享令牌控制访问,保障安全性。

CAthlete的博客 180

栈和队列和数组-优快云博客

一句话理解:栈就像一个羽毛球桶或手枪弹夹——只能从一头放、从一头取,最后放进去的最先拿出来。严格定义:栈是限定仅在某一端进行插入或删除操作的线性表。允许插入和删除的一端叫栈顶(top);另一端叫栈底(bottom);不含任何元素的栈叫空栈;栈中元素遵循后进先出(LIFO,Last In First Out)。两个核心动作插入数据叫入栈 / 进栈(Push);删除数据叫出栈(Pop)。⚠️ 易错点:栈只能在一端操作,不是两端。判断题里说「栈允许在两端操作」一定是错的。一句话理解。

2501_93853322的博客 169

Vue3 低代码移动表单设计器实战(二):缩放画布下的拖拽系统与树状级联数据结构

本文深入剖析Vue3低代码表单设计器在缩放画布下的拖拽失效问题,揭示SortableJS在CSS Transform下坐标崩溃的数学根源。通过自研独立视觉克隆壳层与逆向几何补偿算法,实现精准拖拽;采用扁平数据存储+运行时树状计算结构,解决级联依赖与深克隆难题,确保逻辑一致性与性能优化,为复杂低代码系统提供可复用的工程范式。

NanChen的博客 347

Linux epoll 一篇讲透:从 select/poll 到红黑树、LT/ET,再到完整 TCP 服务器

一万个客户端已经连上服务器,眼下只有十个客户端发来了数据。服务器怎样把时间花在这十个连接上?理解这个问题,就抓住了 epoll 的主线。接下来,我们沿着“为什么需要它 → 接口怎么用 → 内核如何实现 → LT/ET 怎么写 → 完整服务器怎么运行”的顺序,把知识连起来。**阅读基础:**了解socketbindlistenaccept的基本用途即可。本文示例面向 Linux,服务器使用 C++17,实验脚本使用 Python 3。

2601_94861874的博客 205

从决策树到随机森林:Python机器学习里的“树形家族“深度实战与原理拆解

文章浏览阅读2.4k次,点赞52次,收藏32次。决策树和随机森林作为机器学习中的经典算法,各有优劣。决策树以其高可解释性和快速训练的特点

2601_96798011的博客 244

模拟实现 map 和 set —— 基于红黑树的复用设计

/ 三叉链,便于迭代器 -- / ++ 向上回溯T _data;Color _col;, _data(data), _col(RED) // 新结点默认红色{}设计决策目的收益模板参数T而非K, V让同一棵树同时容纳K和pair<K,V>一次实现,两处复用KeyOfT仿函数从T中抽出真正的 key 进行比较map 只以 key 排序,符合语义迭代器用nullptr表示 end结合"向祖先回溯"的++逻辑无需额外标记位,天然对齐Insert返回同时告知位置与是否新插。

2603_95728536的博客 510

【数据结构-2】顺序表的实现

线性表是一种数据结构,它分为逻辑结构和物理结构,在逻辑结构上线性表是呈线性的,数据是是连续存储的;在物理结构(物理空间)上,线性表不一定是连续存储的。线性表的实现,主要分为数组和链式结构。顺序表是线性表的一种实现方式,顺序表在逻辑结构和物理结构上都是连续的。顺序表的底层实现是数组。

a bit 212

算法日常・每日刷题--<动态规划>32

给定严格递增的正整数数组,求最长斐波那契子序列长度。使用二维DP,dp[i][j]表示以arr[i]、arr[j]为最后两项的序列长度,初始化均为2。通过哈希表快速查找前一项target = arr[j] - arr[i],若存在且下标小于i,则状态转移:dp[i][j] = dp[k][i] + 1。遍历更新全局最大长度,最终若结果小于3则返回0。时间复杂度O(n²),空间复杂度O(n²)。

2503_92261635的博客 180
上一篇: Git 之 恢复修改的文件
VB2016
博客等级 码龄10年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值