1、宏定义三个数最大值

挺有意思

max((a), (b), (c)) (a) > (b)? ((a) > (c)? (a) : (c)) ((b) > (c)? (b) : (c))

2、排序算法稳定性

什么是稳定? 稳定指:相同大小的值,经过排序后相对位置不变。

不稳定的常见排序算法:“快些选队”(快速排序,希尔排序,选择排序,堆排序)。

堆排序为什么不稳定?自己举例子。

3、基数排序

void count_sort(int num[], int n, int fac){
int cnt[10] = {0};
int* temp = new int[n + 1];
for(int i = 0; i < n; i++) cnt[num[i] / fac % 10]++;
for(int i = 1; i < 10; i++) cnt[i] += cnt[i - 1];
for(int i = n - 1; i >= 0; i--){
temp[cnt[num[i] / fac % 10] - 1] = num[i];
cnt[num[i] / fac % 10]--;
}
for(int i = 0; i < n; i++) num[i] = temp[i];
delete[] temp;
} void radix_sort(int num[], int n){
int Max = num[0];
for(int i = 0; i < n; i++) Max = max(Max, num[i]);
for(int i = 1; Max / i; i *= 10){
count_sort(num, n, i);
}
}

4、链表相关

判断链表有环:

空间复杂度O(1)的解法:快慢指针。

快指针每次走2步,慢指针每次走1步,当他们第一次相遇时,说明有环。

证明:

假设环大小R,当慢指针到环入口时,快慢指针相距S。不妨设t时间后两者相遇,则必须有S+2t=t+nR。化简可得S+t=nR,因为S<R,所以必有解t=R-S。故假设成立,快慢指针可行。

链表环入口:

快指针每次走2步,慢指针每次走1步,当他们第一次相遇后,设置两个慢指针,一个从相遇点开始,一个重新从点开始,再次相遇就是入口。

证明:

假设环大小R,起点到入口长度L,入口到相遇点S,那么可得2(L+S)=L+S+nR,简化得L+S=nR。所以L=nR-S,nR-S可以看成从相遇点开始走n圈然后回退S步走到入口,L为从起点走到入口,那么显然在入口相遇。

找到链表中点:

空间复杂度O(1)的解法:快慢指针。

快指针每次走2步,慢指针每次走1步。快指针走到末尾时,慢指针在中间。

5、二进制数1

暴力、lowbit

参考资料

每天一道LeetCode-----判断链表是否有环,如果有,找到环的入口位置

手撕 part1的更多相关文章

  1. Netty实现高性能IOT服务器(Groza)之手撕MQTT协议篇上

    前言 诞生及优势 MQTT由Andy Stanford-Clark(IBM)和Arlen Nipper(Eurotech,现为Cirrus Link)于1999年开发,用于监测穿越沙漠的石油管道.目标 ...

  2. 手撕RPC框架

    手撕RPC 使用Netty+Zookeeper+Spring实现简易的RPC框架.阅读本文需要有一些Netty使用基础. 服务信息在网络传输,需要讲服务类进行序列化,服务端使用Spring作为容器.服 ...

  3. NN入门,手把手教你用Numpy手撕NN(一)

    前言 这是一篇包含极少数学推导的NN入门文章 大概从今年4月份起就想着学一学NN,但是无奈平时时间不多,而且空闲时间都拿去做比赛或是看动漫去了,所以一拖再拖,直到这8月份才正式开始NN的学习. 这篇文 ...

  4. NN入门,手把手教你用Numpy手撕NN(2)

    这是一篇包含较少数学推导的NN入门文章 上篇文章中简单介绍了如何手撕一个NN,但其中仍有可以改进的地方,将在这篇文章中进行完善. 误差反向传播 之前的NN计算梯度是利用数值微分法,虽容易实现,但是计算 ...

  5. 手撕公司SSO登陆原理

    Single Sign-on SSO是老生常谈的话题了,但部分同学对SSO可能掌握的也是云里雾里,一知半解.本次手撕公司的SSO登陆原理,试图以一种简单,流畅的形式为你提供 有用的SSO登陆原理. 按 ...

  6. NN入门,手把手教你用Numpy手撕NN(三)

    NN入门,手把手教你用Numpy手撕NN(3) 这是一篇包含极少数学的CNN入门文章 上篇文章中简单介绍了NN的反向传播,并利用反向传播实现了一个简单的NN,在这篇文章中将介绍一下CNN. CNN C ...

  7. 手撕代码:统计1到n二进制数中1出现的总次数

    题目描述: 互娱手撕代码题. 统计从1到n这n个数的二进制表示中1出现的次数. 思路分析: 思路一:直接的做法是从1遍历到n,对于每个数和1做与操作,之后,对于这个数不断做右移操作,不断和1做与操作, ...

  8. 手撕ES6--Promise

    手撕ES6--Promise:https://www.jianshu.com/p/0925eae38d2c 手写一个Promise,附源码分析:https://blog.csdn.net/weixin ...

  9. 编译原理--05 用C++手撕PL/0

    前言 目录 01 文法和语言.词法分析复习 02 自顶向下.自底向上的LR分析复习 03 语法制导翻译和中间代码生成复习 04 符号表.运行时存储组织和代码优化复习 05 用C++手撕PL/0 在之前 ...

随机推荐

  1. codeup 1934 查找元素

    题目描述: 输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1. 输入: 测试数据有多组,输入n(1<=n<=200), ...

  2. 基于Abp React前端的项目建立与运行——React框架分析

    基于Abp React前端的项目建立与运行 目录 基于Abp React前端的项目建立与运行 1 Abp项目配置 2 运行WebApi后端项目 2.1 创建C3D数据库,并且将数据库对应链接字符串替换 ...

  3. windows桌面快速添加控制面板网络等图标

    默认安装后的windows系统只有回收站. rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0

  4. Vue中组件间通信的方式

    Vue中组件间通信的方式 Vue中组件间通信包括父子组件.兄弟组件.隔代组件之间通信. props $emit 这种组件通信的方式是我们运用的非常多的一种,props以单向数据流的形式可以很好的完成父 ...

  5. 订单业务楼层化 view管理器和model管理器进行了model和view的全面封装处理 三端不得不在每个业务入口上线时约定好降级开关,于是代码中充满了各种各样的降级开关字段

    京东APP订单业务楼层化技术实践解密 原创 杜丹 留成 博侃 京东零售技术 2020-09-29 https://mp.weixin.qq.com/s/2oExMjh70Kyveiwh8wOBVA 用 ...

  6. 轻型目录访问协议 ldap 公司内部网站的登录 单点登录

    https://zh.wikipedia.org/wiki/轻型目录访问协议 轻型目录访问协议(英文:Lightweight Directory Access Protocol,缩写:LDAP,/ˈɛ ...

  7. Shell 简单入门教程

    大数据开发岗为什么要学习Shell呢?1)需要看懂大数据运维岗人员编写的Shell程序.2)偶尔会编写一些简单Shell程序来管理集群.提高开发效率 艺多不压身 Shell是一个命令行解释器,它接受应 ...

  8. C#编写一个在asp.net core 3.1下的简单的corn模式的计划任务和一个更简单的定时器类

    asp.net core 下,新增了一个BackgroundService用来实现能在后台跑一个长久运行的任务,因此,也可以用来替换掉原来使用的static的Timer组件, Timer组件主要有以下 ...

  9. Cmder的findstr问题

    在环境变量中加入C:\windows\system32即可

  10. Cisco WS-C4503-E CPU使用率高问题排查

    现状描述: 办公网环境下由2台VSS模式下WS-C4503-E 作为核心交换机,下接若干台WS-C2960X-48LPS-L作为接入.行政同事在进行工位改造的时候为方便将原工位网线下联若干台hub. ...