左程云老师算法课笔记(一)

2023-11-09

前言

仅记录学习笔记,如有错误欢迎指正。
最近,有点忙,也有点懈怠,还是要加油加油,共勉。

一、排序

异或 ^:

  • 交换律:a^ b = b^a
  • 结合律:(a^ b) ^ c = (a ^ c)^ b
    1^ 1 = 0 0^ 0=0 1^ 0=1 0^1=1 (不进位相加!)

所以交换a b 的值 可以这样写:
(前提 a b指向的内存不一样 值可以一样)
a = a^b;
b= a^b;
a= a^b;

例子
已知一个int[] arr 里面只有一种数字出现了奇数次,其他数字都出现了偶数次,怎么找出奇数次的数字?

若是有两种数都出现了奇数次,其他数均为偶数次,,怎么找出这两组数? O(n) O(1)

思路:
(1) int eor = 0 , for循环异或数组 eor最后的值 就是一组出现奇数次的数字 偶数次的数字都为0了
(2) int eor = 0 , for循环异或数组 得到的结果 eor = a ^b ;eor 一定有一位为1
再定义 rightOne = eor &(~eor +1),找出这个数字 最右侧的1 eor’ = 0去异或这一位不为1的数组
得到的 eor’ = a 或者 b 然后 eor ^ eor ’ = b 或者 a

代码如下:
在这里插入图片描述

插入排序:

O(n2) 每次和前一个数字比较 比前数小就交换

二分排序:O(logN)

拓展:

在有序数组中找一个数,二分到找到数据结束就好了;
如果在有序数据中找到一个大于等于某个数字的最左侧的数字,那就需要一直二分到结束。记录最左侧数字。
局部最小值问题:
给定一个无序数据,任意两个相邻的数字不相同,求局部最小值。

如:
求l-r里的最大值(递归方式)
在这里插入图片描述

在这里插入图片描述

归并排序:

左右比较 小的放入新数组 (外排序 两个指针 一个数据)
时间复杂度 nlogn 因为每次比较后排序后的数据都能被下次排序所使用 效率++

拓展:
小和问题 1 3 4 2 5 小和为 0+1+1+3+1+1+3+4+2 = 16

荷兰国旗:把数组的小于 等于 大于某个数分为3个区域
思路:代码在算法篇
在这里插入图片描述

快速排序:

基准值随机选择 时间复杂度就是nlogn在这里插入图片描述

堆排序:

大根堆:每个父节点的值都比子节点的值大,小根堆反之

heapInsert: 每一个插入的节点都与自己的父节点(i-1/2)比较,大于父节点的值则交换。O(logN)

在这里插入图片描述

heapify:
如果需要去除最大值,则把最后一个位置的值赋值给第一个位置,heapSize–,然后新的父节点与子节点比较大小,若是比二者中最大的小,就与最大者交换位置,直到满足大根堆。O(logN)
在这里插入图片描述

堆排序:

先大根堆 然后从根开始heapify O(NlogN)
在这里插入图片描述

题目:数据是一个几乎有序的 就是排好序移动的位置不超过k个位置,排序
小根堆就是优先级队列 PriorityQueue(java) 扩容为2n

在这里插入图片描述

小根堆变为大根堆:

在这里插入图片描述

桶排序:

例如给员工年龄排序 定义一个 0-200的数组 下标表示年龄 值表示人数 排序的结果就是
下标*人数个数的数组(只适用于不基于比较的情况 )

基数排序:

maxbit,统计最大值有多少位
在这里插入图片描述
注意是相同值的相对顺序不变!!就是稳定的
在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

左程云老师算法课笔记(一) 的相关文章

随机推荐

  • STM32F1开发指南笔记46----字库原理及汉字库创建

    随着液晶显示技术的发展和应用 越来越多的开发人员希望在自己开发的仪器中使用液晶屏幕来显示汉字 通常的汉字显示方式是 先根据所需要的汉字提取汉字点阵 譬如16x16点阵 24x24点阵等 将点阵文件存入ROM中 形成新的汉字编码 然后在使用时
  • 蓝桥杯练习——Python砖墙

    题目 你的面前有一堵矩形的 由 n 行砖块组成的砖墙 这些砖块高度相同 也就是一个单位高 但是宽度不同 每一行砖块的宽度之和相等 你现在要画一条 自顶向下 的 穿过 最少 砖块的垂线 如果你画的线只是从砖块的边缘经过 就不算穿过这块砖 你不
  • API网关

    API网关 api gateway 即 api 网关 所有的请求首先会经过这个网关 这有点类似于前端控制器模式 也有点类似于 Facade模式 如下图所示 由于所有的请求会先经过这个 api 网关 所以 可以在 这里做 权限控制 安全 负载
  • 微信小程序支付开发及问题

    一 前期准备 微信后台申请微信支付 微信支付 商务号关联 个人信息 填写 操作密码 api密钥设置 得到appid AppSecret 商户号 api密钥等 微信支付接口签名校验工具 二大概流程 1 登录 获取code 一个code只能用一
  • 练习2-2 在不使用运算符&&或

    for i 0 i lt lim 1 c getchar n c EOF i s i c 练习2 2 在不使用运算符 或 的条件下编写一个与上面的for循环语句等价的循环语句 参考代码 include
  • mysql 如何修改数据库表结构_MySQL数据库如何修改表结构

    MySQL数据库修改表结构的方法 1 使用add添加字段 使用drop删除字段 2 使用alter修改字段名 3 修改列类型 4 修改表名 5 修改表选项 6 修改列属性 MySQL数据库修改表结构的方法 1 添加与删除字段 1 添加 Al
  • ChatGLM2-6B中引入ptuning报错:AttributeError: ‘ChatGLMModel‘ object has no attribute ‘prefix_encoder‘

    File home ai gm ChatGLM2 6B ptuning v1 main py line 411 in
  • hdoj1052 Tian Ji -- The Horse Racing(贪心算法+2)

    田忌赛马 关键在于比较的次序 首先先比较两个人最慢的马 如果田忌的马快就直接赢下一分 count 如果更慢的话就用这匹慢马去与大王最快的马比赛 count 如果相等的话 再比较两个人最快的马 如果田忌的马更快 count 反之就用田忌的慢马
  • 关于QT线程暂停、恢复、停止、重启、暂停后回收的处理

    thread h Qmutex m mutex void threadPause void threadResume thread cpp bool Flag StopThread 0 bool Flag PauseThread 0 voi
  • C#中? 、?? 、?. 、??= 的用法和说明

    一 可空类型修饰符 lt gt 引用类型能用空引用来表示一个表示一个不存在的值 但是值类型不能 例如 string str null int i null 编译报错 为了使值类型也能使用可空类型 就可以用 来表示 表现形式为 T 例如 in
  • 关于 Android 8.0 的录像 quota exceeded 异常

    这是个之前从没碰到过的问题 记录一下这无语的跟踪过程 两周前的某一天 忽然一封邮件转过来 测试那边描述手机录像在内置卡录满状态下会出问题 录出的文件播不了 按说 磁盘录满根本不是个大事 Camera APK 会统计内置卡或者外置卡的剩余可用
  • HTTP协议理解

    HTTP协议理解 参考 https www cnblogs com li0803 archive 2008 11 03 1324746 html HTTPS连接过程 https blog csdn net lblmlms article d
  • python爬虫(上课笔记)

    爬虫概述 爬虫 网络爬虫是一种按照一定的规则 自动地抓取万维网信息的程序或者脚本 其本质就是通过编写程序拟浏览器上网 抓取数据的过程 爬虫特点 在法律中都是不被禁止的 具有违法风险 爬虫是一个博弈的过程 反爬机制 反反爬策略 robots协
  • ffmpeg demux 实时流

    FFMPEG 的参数当中就有 i 表示 input 这里的input 不仅仅是文件 还可以是实时流 目前我用过的应该支持一下几种流格式 rtsp udp http 其他的没用到 查查文档应该能够找到它还能支持什么 一般用法 ffmpeg i
  • pytorch的cuda环境搭建(GPU版本安装)

    第一步 安装cuda 安装cuda 这里还需要安装对应版本的Visual Studio 具体参考本博主的博客 https blog csdn net qq 36653505 article details 81368346 第二步 安装cu
  • UniLM详解,统一语言模型(Unified Language Model,UniLM)

    先导知识 Transformer BERT GPT MASS 前言 预训练模型按照训练方式或者网络结构可以分成三类 一是以BERT 2 为代表的自编码 Auto Encoding 语言模型 它使用MLM做预训练任务 自编码预训模型往往更擅长
  • layui后台模板_ThinkPHP6开发博客实战入门(五),创建admin后台模板

    我们在app目录创建admin controller Index php文件 同时创建index和home操作方法 tp6的模板文件需要使用thinkfacadeView来操作视图 用return View fetch 来输出模板 默认in
  • 学习“基于深度学习的故障诊断”开源

    博主秋雨行舟在csdn b站都有开源 这里只做自己的学习记录用 基于深度学习的轴承故障诊断 原文在这里 软件的下载 环境的配置up主给的非常详细了 所以这里只记录一些代码注释 一 CNN 注意 作者的代码是有一点点问题的 更改三条代码就可以
  • git中的SSL certificate problem: unable to get local issuer certificate错误的解决办法

    git中的SSL certificate problem unable to get local issuer certificate错误的解决办法 我们在使用git初始化一个项目时 尤其是通过git submodule update in
  • 左程云老师算法课笔记(一)

    前言 仅记录学习笔记 如有错误欢迎指正 最近 有点忙 也有点懈怠 还是要加油加油 共勉 一 排序 异或 交换律 a b b a 结合律 a b c a c b 1 1 0 0 0 0 1 0 1 0 1 1 不进位相加 所以交换a b 的值