手撕 part1
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的更多相关文章
- Netty实现高性能IOT服务器(Groza)之手撕MQTT协议篇上
前言 诞生及优势 MQTT由Andy Stanford-Clark(IBM)和Arlen Nipper(Eurotech,现为Cirrus Link)于1999年开发,用于监测穿越沙漠的石油管道.目标 ...
- 手撕RPC框架
手撕RPC 使用Netty+Zookeeper+Spring实现简易的RPC框架.阅读本文需要有一些Netty使用基础. 服务信息在网络传输,需要讲服务类进行序列化,服务端使用Spring作为容器.服 ...
- NN入门,手把手教你用Numpy手撕NN(一)
前言 这是一篇包含极少数学推导的NN入门文章 大概从今年4月份起就想着学一学NN,但是无奈平时时间不多,而且空闲时间都拿去做比赛或是看动漫去了,所以一拖再拖,直到这8月份才正式开始NN的学习. 这篇文 ...
- NN入门,手把手教你用Numpy手撕NN(2)
这是一篇包含较少数学推导的NN入门文章 上篇文章中简单介绍了如何手撕一个NN,但其中仍有可以改进的地方,将在这篇文章中进行完善. 误差反向传播 之前的NN计算梯度是利用数值微分法,虽容易实现,但是计算 ...
- 手撕公司SSO登陆原理
Single Sign-on SSO是老生常谈的话题了,但部分同学对SSO可能掌握的也是云里雾里,一知半解.本次手撕公司的SSO登陆原理,试图以一种简单,流畅的形式为你提供 有用的SSO登陆原理. 按 ...
- NN入门,手把手教你用Numpy手撕NN(三)
NN入门,手把手教你用Numpy手撕NN(3) 这是一篇包含极少数学的CNN入门文章 上篇文章中简单介绍了NN的反向传播,并利用反向传播实现了一个简单的NN,在这篇文章中将介绍一下CNN. CNN C ...
- 手撕代码:统计1到n二进制数中1出现的总次数
题目描述: 互娱手撕代码题. 统计从1到n这n个数的二进制表示中1出现的次数. 思路分析: 思路一:直接的做法是从1遍历到n,对于每个数和1做与操作,之后,对于这个数不断做右移操作,不断和1做与操作, ...
- 手撕ES6--Promise
手撕ES6--Promise:https://www.jianshu.com/p/0925eae38d2c 手写一个Promise,附源码分析:https://blog.csdn.net/weixin ...
- 编译原理--05 用C++手撕PL/0
前言 目录 01 文法和语言.词法分析复习 02 自顶向下.自底向上的LR分析复习 03 语法制导翻译和中间代码生成复习 04 符号表.运行时存储组织和代码优化复习 05 用C++手撕PL/0 在之前 ...
随机推荐
- CS_WHERE_USED_MAT 反查BOM的成品CS15
可能很多人都用过BOM展开的函数,但是有的时候,需要通过组件去反查BOM的成品,而这时候就需要用到函数 CS_WHERE_USED_MAT来实现,而对于CS_WHERE_USED_MAT只能反查到上一 ...
- 简话http请求
一.http请求概念: 1.是指从客户端到服务器端的请求消息.包括:消息首行中,对资源的请求方法.资源的标识符及使用的协议. 包括请求(request)和响应(response) 2.过程: 域名解析 ...
- Infrastructure as Code 行为驱动开发指南 https://www.ibm.com/developerworks/cn/devops/d-bbd-guide-iac/index.html
Infrastructure as Code 行为驱动开发指南 https://www.ibm.com/developerworks/cn/devops/d-bbd-guide-iac/index.h ...
- URL 重定向机制
由于存在上述三种 URL 重定向机制,那么在多种方法同时设定的情况下,哪种方法会首先起作用呢?优先级顺序如下: HTTP 协议的重定向机制永远最先触发,即便是在没有传送任何页面--也就没有页面被(客户 ...
- spring boot 启动 开启注解 加载 bean
业务描述:创建一个cache类然后交给spring 管理. @Component @Scope("singleton") public class Cache { public C ...
- Win10家庭版Hyper-V出坑(完美卸载,冲突解决以及Device Guard问题)
本文链接:https://blog.csdn.net/hotcoffie/article/details/85043894 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附 ...
- Python新手入门值流程结构
if-else socore =int(input('请输入成绩')); if socore>=90 : print("A") elif socore>=80 : pr ...
- MySql(二)索引的设计与使用
MySql(二)索引的设计与使用 一.索引概述 二.设计索引的原则 三.BTREE索引与HASH索引 一.索引概述 所有Mysql列类型都可以被索引,对相关列使用索引时提高select操作性能的最佳途 ...
- Python3 注释、运算符、数字、字符串
文章目录 注释 单引号(''') 双引号(""") 运算符 数字(Number) Python 数字类型转换 数学函数 随机数函数 三角函数 数学常量 数字与字符,列表之 ...
- Golang内建库学习笔记(1)-sort和container
sort库 利用sort.Sort进行排序须实现如下接口 type Interface interface { // 获取数据集合元素个数 Len() int // 如果i索引的数据小于j所以的数据, ...