最新要闻
- 三星Galaxy S24系列或取消Plus版本:销量太惨淡
- 【天天时快讯】大碗更尽兴!海福盛香辣牛肉面大促:每桶到手3块钱
- 今日视点:特斯拉2022年中国销量44万辆 还不敌比亚迪一个宋
- 《咬文嚼字》公布年度十大语文差错:连花清瘟?莲花清瘟?
- 世界观焦点:荣耀二代骁龙8新机来了!Magic 5系列入网:春节后发布
- 热门:别克GL8危险!腾势D9累计订单超5万:50%用户来自BBA
- 3岁男童反复呕吐被确诊癌症晚期:被称为儿童癌症之王
- 当前速读:《咬文嚼字》公布2022年度十大语文差错:天和核心舱、莘莘学子上榜
- 努比亚Z50限定版明天首销:搭载最纯净的定制系统 无广告
- 今日热议:2022年我国人均存款近1.3万元 网友:又拖后腿了
- 【报资讯】一家四口在三亚溺水全部遇难:官方科普“离暗流”危险性
- 天天微动态丨2022收官!合资车时代被终结 “迪王”养成 大票车企失去肥年
- 【环球速看料】《小美人鱼》真人电影周边童书曝光 黑美人鱼好可爱
- 天天即时:双形态不入耳!讯飞开放式办公耳机iFLYBUDS Air图赏
- 小米MIX Fold 2厚度与戴壳iPhone 14 Pro Max相当 雷军:惊艳
- 当前通讯!3秒复制任何人的嗓音!微软音频版DALL·E细思极恐 连环境背景音也能模仿
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
全球快看点丨链表栈队列递归哈希表有序表
链表
单链表
单链表的Java实现:
public static class Node {public int value;public Node next;public Node(int data) {value = data;}}
单链表反转:
(资料图片仅供参考)
public static Node reverseLinkedList(Node head){Node pre = null; Node next = null; while(head != null){ next = head.next; head.next = pre; pre = head; head = next; } return pre;}
删除单链表的某个数:
public static class Node {public int value;public Node next;public Node(int data) {this.value = data;}}public static Node removeValue(Node head, int num){ //确定头节点 ,如果头节点不是num,直接跳出,如果是,头节点往下走 while(head != null){ if(head.value != num){ break; } head = head.next; } Node pre = head; Node cur = head; while(cur != null){ if(cur.value == num){ pre.next = cur.next }else{ pre = cur } cur = cur.next } return head}
双向链表
双向链表Java实现:
public static class DoubleNode {public int value;public DoubleNode last;public DoubleNode next;public DoubleNode(int data) {value = data;}}
双向链表反转:
public static DoubleNode reverseDoubleList(DoubleNode head) {DoubleNode pre = null; DoubleNode next = null; while(head != null){ next = head.next; head.next = pre; head.last = next; pre = head; head = next; }}
栈
栈的原理很简单,就是先进后出,类似弹夹。但是实现方式很多。
双向链表实现栈:
public static class DoubleEndsQueue {public Node head;public Node tail;//双向链表头部插入节点public void addFromHead(T value) {Node cur = new Node(value);if (head == null) {head = cur;tail = cur;} else {cur.next = head;head.last = cur;head = cur;}}//双向链表尾部插入节点public void addFromBottom(T value) {Node cur = new Node(value);if (head == null) {head = cur;tail = cur;} else {cur.last = tail;tail.next = cur;tail = cur;}}//双向链表头部弹出节点public T popFromHead() {if (head == null) {return null;}Node cur = head;if (head == tail) {head = null;tail = null;} else {head = head.next;cur.next = null;head.last = null;}return cur.value;}//双向链表尾部弹出节点public T popFromBottom() {if (head == null) {return null;}Node cur = tail;if (head == tail) {head = null;tail = null;} else {tail = tail.last;tail.next = null;cur.last = null;}return cur.value;}public boolean isEmpty() {return head == null;}}//栈public static class MyStack {private DoubleEndsQueue queue;public MyStack() {queue = new DoubleEndsQueue();} //入栈 在双向链表头部插入public void push(T value) {queue.addFromHead(value);}//出栈 在双向链表头部删除并返回public T pop() {return queue.popFromHead();}public boolean isEmpty() {return queue.isEmpty();}}
面试题 数组实现栈:
public static class MyStatic{ private int[] arr ; private int pull ; private int poli ; private int size ; private int limit ; public MyStatic(int l){ arr = new int[l]; pull = 0; poli = 0; size = 0; limit = l ; } public void pull(int value ){ if(size == limit ){ throw new RuntimeException("栈满了,不能再加了"); } arr[pull] = value; poli = pull; pull = pullIndex(pull); } public int pop(){ if(size == 0){ throw new RuntimeException("栈空了"); } int res = arr[poli]; poli = pollIndex(poli); return res; } public int pullIndex(int i ){ return i < limit -1 ? i+1 : 0; } public int pollIndex(int i){ return i > 0 ? i-1 : limit -1; } }
要求用系统栈实现取出栈最小值的方法,要求时间复杂度O(1):
需要用两个栈实现,如果最小栈为空,数据栈入栈则最小栈入栈,如果数据栈入栈值大于最小栈栈顶,最小栈不入栈。数据栈出栈,数据栈值==最小栈 最小栈出栈。
public static class MyStack1 { private Stack stackData; private Stack stackMin; public MyStack1() { this.stackData = new Stack(); this.stackMin = new Stack(); } public void push(int newNum) { if (this.stackMin.isEmpty()) { this.stackMin.push(newNum); } else if (newNum <= this.getmin()) { this.stackMin.push(newNum); } this.stackData.push(newNum); } public int pop() { if (this.stackData.isEmpty()) { throw new RuntimeException("Your stack is empty."); } int value = this.stackData.pop(); if (value == this.getmin()) { this.stackMin.pop(); } return value; } public int getmin() { if (this.stackMin.isEmpty()) { throw new RuntimeException("Your stack is empty."); } return this.stackMin.peek(); }}
双队列实现栈:两个队列互相转换
public static class TwoQueueStack {public Queue queue;public Queue help;public TwoQueueStack() {queue = new LinkedList<>();help = new LinkedList<>();}public void push(T value) {queue.offer(value);}public T poll() {while (queue.size() > 1) {help.offer(queue.poll());}T ans = queue.poll();Queue tmp = queue;queue = help;help = tmp;return ans;}public T peek() {while (queue.size() > 1) {help.offer(queue.poll());}T ans = queue.peek();Queue tmp = queue;queue = help;help = tmp;help.offer(ans);return ans;}public boolean isEmpty() {return queue.isEmpty();}}
队列
队列的原理就是先进先出,就像在食堂打饭排队一样。
双向链表实现队列:
public static class DoubleEndsQueue {public Node head;public Node tail;public void addFromHead(T value) {Node cur = new Node(value);if (head == null) {head = cur;tail = cur;} else {cur.next = head;head.last = cur;head = cur;}}public void addFromBottom(T value) {Node cur = new Node(value);if (head == null) {head = cur;tail = cur;} else {cur.last = tail;tail.next = cur;tail = cur;}}public T popFromHead() {if (head == null) {return null;}Node cur = head;if (head == tail) {head = null;tail = null;} else {head = head.next;cur.next = null;head.last = null;}return cur.value;}public T popFromBottom() {if (head == null) {return null;}Node cur = tail;if (head == tail) {head = null;tail = null;} else {tail = tail.last;tail.next = null;cur.last = null;}return cur.value;}public boolean isEmpty() {return head == null;}}public static class MyQueue {private DoubleEndsQueue queue;public MyQueue() {queue = new DoubleEndsQueue();}public void push(T value) {queue.addFromHead(value);}public T poll() {return queue.popFromBottom();}public boolean isEmpty() {return queue.isEmpty();}}
面试题 数组实现队列:
public static class MyQueue {private int[] arr;private int pushi;private int polli;private int size;private final int limit;public MyQueue(int l) {arr = new int[l];pushi = 0;polli = 0;size = 0;limit = l;}public void push(int value) {if (size == limit) {throw new RuntimeException("栈满了,不能再加了");}size++;arr[pushi] = value;pushi = nextIndex(pushi);}public int pop() {if (size == 0) {throw new RuntimeException("栈空了,不能再拿了");}size--;int ans = arr[polli];polli = nextIndex(pushi);return ans;}public boolean isEmpty() {return size == 0;}private int nextIndex(int i) {return i < limit - 1 ? i + 1 : 0;}}
面试题 用栈实现队列
public static class TwoStacksQueue {public Stack stackPush;public Stack stackPop;public TwoStacksQueue() {stackPush = new Stack();stackPop = new Stack();}// push栈向pop栈倒入数据private void pushToPop() {if (stackPop.empty()) {while (!stackPush.empty()) {stackPop.push(stackPush.pop());}}}public void add(int pushInt) {stackPush.push(pushInt);pushToPop();}public int poll() {if (stackPop.empty() && stackPush.empty()) {throw new RuntimeException("Queue is empty!");}pushToPop();return stackPop.pop();}public int peek() {if (stackPop.empty() && stackPush.empty()) {throw new RuntimeException("Queue is empty!");}pushToPop();return stackPop.peek();}}
递归
从思想上理解递归,可以把一个大事件分成若干个小事件,然后通过判断,完成大事件。
递归的底层是利用系统栈实现的。任何递归方法都可以改成非递归。
题目:递归求数组L,R上的最大值。
public static int process(int[] arr, int L, int R) {if (L == R) { // arr[L..R]范围上只有一个数,直接返回,base casereturn arr[L];}// L..mid mid+1...R// int mid = (L+R)/2int mid = L + ((R - L) >> 1); // 中点int leftMax = process(arr, L, mid);int rightMax = process(arr, mid + 1, R);return Math.max(leftMax, rightMax);}
时间复杂度可以通过Master公式来计算
T(N) = a * T(N/b) + O(N^d)(其中的a、b、d都是常数)
的递归函数,可以直接通过Master公式来确定时间复杂度
如果 log(b,a) < d,复杂度为O(N^d)
如果 log(b,a) > d,复杂度为O(N^log(b,a))
如果 log(b,a) == d,复杂度为O(N^d * logN)
哈希表
1)哈希表在使用层面上可以理解为一种集合结构
2)如果只有key,没有伴随数据value,可以使用HashSet结构
3)如果既有key,又有伴随数据value,可以使用HashMap结构
4)有无伴随数据,是HashMap和HashSet唯一的区别,实际结构是一回事
5)使用哈希表增(put)、删(remove)、改(put)和查(get)的操作,可以认为时间复杂度为 O(1),但是常数时间比较大
6)放入哈希表的东西,如果是基础类型,内部按值传递,内存占用是这个东西的大小
7)放入哈希表的东西,如果不是基础类型,内部按引用传递,内存占用是8字节
有序表
1)有序表在使用层面上可以理解为一种集合结构
2)如果只有key,没有伴随数据value,可以使用TreeSet结构
3)如果既有key,又有伴随数据value,可以使用TreeMap结构
4)有无伴随数据,是TreeSet和TreeMap唯一的区别,底层的实际结构是一回事
5)有序表把key按照顺序组织起来,而哈希表完全不组织
6)红黑树、AVL树、size-balance-tree和跳表等都属于有序表结构,只是底层具体实现不同
7)放入如果是基础类型,内部按值传递,内存占用就是这个东西的大小
8)放入如果不是基础类型,内部按引用传递,内存占用是8字节
9)不管是什么底层具体实现,只要是有序表,都有以下固定的基本功能和固定的时间复杂度
-
全球快看点丨链表栈队列递归哈希表有序表
链表单链表单链表的Java实现:publicstaticclassNode{publicintvalue;publicNodenext;publicNode(intda
来源: -
Codeforces 1278 F Cards 增强版 题解 (斯特林数,推式子)
原题链接增强版链接增强版中k=1e7为啥网上题解的式子都那么长啊 jpg首先令$p= frac1m$。求某个数的...
来源: -
热点在线丨sortablejs 列表拖拽排序,js vue2,解决拖拽排序乱序问题
功能:在列表中,需要给列表进行拖拽排序,并实时保存拖拽后的列表书序实现;运用js中的sortablejs库环境...
来源: 全球快看点丨链表栈队列递归哈希表有序表
Codeforces 1278 F Cards 增强版 题解 (斯特林数,推式子)
热点在线丨sortablejs 列表拖拽排序,js vue2,解决拖拽排序乱序问题
世界快资讯:用低代码这把“剑”之前,要先看定位,各取所需
当前短讯!开源动物行为分析实验箱(斯金纳箱)研发总结
三星Galaxy S24系列或取消Plus版本:销量太惨淡
【天天时快讯】大碗更尽兴!海福盛香辣牛肉面大促:每桶到手3块钱
今日视点:特斯拉2022年中国销量44万辆 还不敌比亚迪一个宋
《咬文嚼字》公布年度十大语文差错:连花清瘟?莲花清瘟?
世界观焦点:荣耀二代骁龙8新机来了!Magic 5系列入网:春节后发布
环球观速讯丨python之路 58 linux文件配置相关
学习笔记——MyBatis自动映射与自定义映射;Mybatis延迟加载
当前关注:C#、TS和Dart对比1:概述
即时焦点:SpringBoot Xss漏洞修复
软件开发入门教程网之Git 基本操作
热门:别克GL8危险!腾势D9累计订单超5万:50%用户来自BBA
3岁男童反复呕吐被确诊癌症晚期:被称为儿童癌症之王
当前速读:《咬文嚼字》公布2022年度十大语文差错:天和核心舱、莘莘学子上榜
努比亚Z50限定版明天首销:搭载最纯净的定制系统 无广告
环球观点:操作系统
环球播报:C++构造函数【cherno课程学习】
手机端H5 实现自定义拍照界面
今日热议:2022年我国人均存款近1.3万元 网友:又拖后腿了
【报资讯】一家四口在三亚溺水全部遇难:官方科普“离暗流”危险性
天天微动态丨2022收官!合资车时代被终结 “迪王”养成 大票车企失去肥年
【环球速看料】《小美人鱼》真人电影周边童书曝光 黑美人鱼好可爱
天天即时:双形态不入耳!讯飞开放式办公耳机iFLYBUDS Air图赏
小米MIX Fold 2厚度与戴壳iPhone 14 Pro Max相当 雷军:惊艳
当前通讯!3秒复制任何人的嗓音!微软音频版DALL·E细思极恐 连环境背景音也能模仿
每日热议!官宣:Intel发烧U回来了!350W 56核能打过AMD 280W 64核吗?
每日播报!人气爆棚!上美回应《中国奇谭》周边断货:已开足马力生产
Shell 命令奇淫技巧,就是有点短
当前头条:你买过哪些?苹果已售出23.2亿部手机 国人最爱iPhone 6
每日速递:美国加州风暴天气已致17死 有大树直接被连根拔起
环球速看:取消灵动岛!苹果iPhone 16 Pro将配备屏下Face ID
春运咋办?博主跑1千公里高速实测充电桩:有服务区一半都是坏的
【时快讯】《中国奇谭》口碑封神!仅上线三集 播放量突破5000万
【世界聚看点】CPU、显卡持续涨价!全球PC出货量暴跌 联想继续第一
简讯:(五)elasticsearch 源码之查询流程分析
环球热文:消息服务 + Serverless 函数计算如何助力企业降本提效?
世界滚动:el-table更新数据页面闪烁问题
全球今日报丨DJI这三个字母 是怎么占领你的背包的
环球热头条丨告别毛巾“一条恒久远”!金号纯棉抑菌毛巾大促:一条5块钱
今日快讯:哪吒汽车联手宁德时代共研“滑板底盘”:电池、底盘合体
世界信息:苹果加大降低中国工厂依赖程度:都要搬走?印度成香饽饽 出口激增
独占4K AMR 120帧高规格!《流浪地球2》发布CINITY海报
世界热点!指针知识点总结
每日热讯!TiDB 底层存储结构 LSM 树原理介绍
linux基础:2、前期必备知识、系统运行命令、快捷方式命令、目录结构相关命令、文件与文件夹相关命令、目录结构
环球今日报丨C# 循环给多个连续编号的控件赋值
网上银行怎么转账?网上银行转账限额是多少?
诺基亚5800xm当年多少钱?诺基亚5800XM手机参数
投影仪吊架怎么安装?吊式投影仪安装方法
华为gt2怎么设置相册表盘?华为gt2有血氧功能吗?
唐门鸟翔碧空在哪里学?唐门鸟翔碧空可以放什么技能?
雷龙鱼水温多少合适?雷龙吃什么饲料?
最新消息:三星Galaxy S23系列定档:2月2日登场 首发新版骁龙8 Gen2
《满江红》公布秦桧版预告:饰演者雷佳音狠辣狡诈
【全球新要闻】特斯拉大降价 其它车企跟不跟?乘联会秘书长发声
焦点速读:万物有灵 被收养流浪狗跳车拦住怀孕主人 下一秒山路塌方
每日聚焦:1208元!中国探月航天推出限量火箭碎片:运送嫦娥四号的长三乙
加减乘除是谁发明的?加减乘除混合运算100道
米亲韩语是什么意思?韩语shake it是什么意思?
全高清和超高清有什么区别?全高清和超高清4K哪个更护眼?
异丙醇的作用与用途有哪些?异丙醇和酒精的区别是什么?
Serverless 奇点已来,下一个十年将驶向何方?
每日热点:没电、没网也能支付 数字人民币全新功能上线:安卓先行
环球微资讯!用上比亚迪发动机 斯威大虎ED-i增程版亮相:油耗低至2.06升
关注:公司就给员工加薪50元致歉 已尽力对不起大家引热议:为何不知足?
Win7彻底停服 国产OS统信站出来了:打印机、软件轻松迁移
读编程与类型系统笔记04_类型安全
微动态丨【QtJson】用Qt自带的QJson,直接一步到位封装和解析一个类的实例对象!
还买iPhone 14/15?新iPhone准备中:苹果弃灵动岛 更完美
人民日报评电视收费乱象:从用户身上“薅羊毛” 广告还见缝插针
微头条丨今年首场寒潮来袭 最强雨雪下在哪?这些地区将迎暴雨、暴雪
天天滚动:2022年 我把比亚迪DM-i插混当纯电动车 开了1万公里
《王者荣耀》星会员正式上线:全新充值体系 打破贵10等级限制
当前速讯:神舟新款游戏本上架:13代i5+满血RTX 3050 4999元
最强高端!小米13 Ultra有望下月发:终于告别USB 3.0
动态:家长炮轰《中国奇谭》烂 吓哭孩子引热议:专家回应 给成年人看
环球观焦点:贾跃亭又摊上事了:法拉第未来接到纳斯达克摘牌警告
全球报道:JavaScript 扁平与树形数组数据的转换
热点在线丨层叠样式表(CSS)1
当前最新:ceph-3
世界速读:区块链特辑——solidity语言基础(四)
热文:华硕全球首秀四频段Wi-Fi 7路由器:峰值下载2.5万兆
滚动:惠普新款EliteBook 1040笔记本发布:13代酷睿、2K 120Hz屏
天天视点!为什么一个病毒株传着传着就没了?
Redmi K40S 12+256G顶配版不到1900元:骁龙870和OIS都有
各大新能源车企年度KPI出炉 特斯拉未达标 比亚迪称王
焦点速读:区块链特辑——solidity语言基础(二)
每日时讯!酷安最火骁龙8系手机诞生!一加11酷安热度第一
时隔两年 国美真快乐App重新更名国美
快看点丨大前端html学习06-宽高自适应
天天观察:SpringDataJPA 程序未配置乐观锁的情况下,报了乐观锁异常
Redis的客户端
每日时讯!关于19c RU补丁报错问题的分析处理
环球简讯:记录使用adb连接rn项目进行开发
焦点要闻:加油被惊喜到!一加11不杀后台:前一天打开的APP第二天还在
最新快讯!Python中高阶函数与装饰器教程