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. linux下安装nacos

    一.安装 1.下载安装包: https://github.com/alibaba/nacos/releases 2.解压 : tar -xzvf nacos-server-1.2.1.tar.gz 3 ...

  2. [Ceoi2004]Journey

    题目描述 给出N个点,及你的出发点K. 接下来N-1行描述有关边的开始点,结束点,边长.保证图中不会有环 接下来给出数字J,代表你要走多少个点. 接下来J个数字,代表你要走过的点的编号.当然你可以自己 ...

  3. Java 给Word不同页面设置不同背景

    Word文档中,可直接通过[设计]-[页面颜色]页面颜色,通过Java代码可参考如下设置方法: 1. 设置单一颜色背景 doc.getBackground().setType(BackgroundTy ...

  4. OpenDaylight — YANG

    1. 介绍 YANG 是一种用于为 NETCONF 协议建模数据的语言. YANG 将数据的层次结构建模为一棵树. 2. 节点类型 2.1 leaf 它只有一个特定类型的值,并且没有子节点. YANG ...

  5. WIFI 国家码和信道划分

    前言 网上百度了很多资料,都没有找到国家码对应支持哪些信道的资料,无奈只能qiang到谷歌,分享给大家完整的WIFI 国家码和信道划分. 安卓WIFI国家码的影响 android中设置wifi国家码的 ...

  6. Redis 实战 —— 09. 实现任务队列、消息拉取和文件分发

    任务队列 P133 通过将待执行任务的相关信息放入队列里面,并在之后对队列进行处理,可以推迟执行那些耗时对操作,这种将工作交给任务处理器来执行对做法被称为任务队列 (task queue) . P13 ...

  7. jQuery json遍历渲染到页面并且拼接html

    jQuery 处理 json遍历在页面中显示,并且拼接html. 1 <title>json多维数组遍历渲染</title> 2 3 <body> 4 <di ...

  8. fiddler安装以及使用说明

    一.fiddler fiddler是一个抓包工具,通过使用它抓包我们可以很清晰的看到抓的内容的协议,URL,参数等. 1.安装 在普通下载网站找到安装包,直接安装,点击下一步即可. 二.使用 1.se ...

  9. Cognos软件介绍文档(原创)

    1. Cognos简介 Cognos是世界上最大的业务智能软件制造商,它能够帮助用户提取公司数据,然后分析并汇总得出报告.Cognos有许多产品,但最为著名的还是它的PowerPlay联机分析处理(o ...

  10. 文件夹copy器(多进程版)

    import multiprocessing import os import time import random def copy_file(queue, file_name,source_fol ...