初级--03---二分、复杂度、哈希表和有序表
文章目录二分法题目1测试-----制造对数器int mid (L R) / 2; 有可能int溢出优化为: int mid L ((R - L) 1);题目2局部最小值问题时间复杂度基础--04----时间、空间复杂度哈希表哈希表可以看成一个(K V)表哈希表的增删改查,时间复杂度都可以看成 O(1)哈希表分类:HashMap基础类型 : int double char string ------按值传递对象类型 : int double char string ------引用传递有序表TreeMap的增删改查,时间复杂度都可以看成 O(n)java数据结构TreeMapTreeMap 的key 一定要能够比较,不然会报错二分法题目1// arr保证有序publicstaticbooleanfind(int[]arr,intnum){if(arrnull||arr.length0){returnfalse;}intL0;intRarr.length-1;while(LR){intmid(LR)/2;if(arr[mid]num){returntrue;}elseif(arr[mid]num){Lmid1;}else{Rmid-1;}}returnfalse;}测试-----制造对数器packagemain.java.newcode;importjava.util.Arrays;publicclassCode01_BSExist{// arr保证有序publicstaticbooleanfind(int[]arr,intnum){if(arrnull||arr.length0){returnfalse;}intL0;intRarr.length-1;while(LR){intmid(LR)/2;if(arr[mid]num){returntrue;}elseif(arr[mid]num){Lmid1;}else{Rmid-1;}}returnfalse;}// for testpublicstaticbooleantest(int[]sortedArr,intnum){for(intcur:sortedArr){if(curnum){returntrue;}}returnfalse;}// for testpublicstaticint[]generateRandomArray(intmaxSize,intmaxValue){int[]arrnewint[(int)((maxSize1)*Math.random())];for(inti0;iarr.length;i){arr[i](int)((maxValue1)*Math.random())-(int)(maxValue*Math.random());}returnarr;}publicstaticvoidmain(String[]args){inttestTime500000;intmaxSize10;intmaxValue100;booleansucceedtrue;for(inti0;itestTime;i){int[]arrgenerateRandomArray(maxSize,maxValue);Arrays.sort(arr);intvalue(int)((maxValue1)*Math.random())-(int)(maxValue*Math.random());if(test(arr,value)!find(arr,value)){System.out.println(出错了);succeedfalse;break;}}System.out.println(succeed?Nice!:Fucking fucked!);}}int mid (L R) / 2; 有可能int溢出优化为:int mid L ((R - L) 1);// arr保证有序publicstaticbooleanfind(int[]arr,intnum){if(arrnull||arr.length0){returnfalse;}intL0;intRarr.length-1;while(LR){intmidL((R-L)1);if(arr[mid]num){returntrue;}elseif(arr[mid]num){Lmid1;}else{Rmid-1;}}returnfalse;}题目2// arr有序的num 最左publicstaticintmostLeftNoLessNumIndex(int[]arr,intnum){if(arrnull||arr.length0){return-1;}intL0;intRarr.length-1;intans-1;while(LR){intmid(LR)/2;if(arr[mid]num){ansmid;Rmid-1;}else{Lmid1;}}returnans;}// 在arr上找满足value的最右位置publicstaticintnearestIndex(int[]arr,intvalue){intL0;intRarr.length-1;intindex-1;// 记录最右的对号while(LR){intmidL((R-L)1);if(arr[mid]value){indexmid;Lmid1;}else{Rmid-1;}}returnindex;}局部最小值问题publicclassCode04_BSAwesome{// arr 整体无序// arr 相邻的数不相等publicstaticintoneMinIndex(int[]arr){if(arrnull||arr.length0){return-1;}intNarr.length;if(N1){return0;}if(arr[0]arr[1]){return0;}if(arr[N-1]arr[N-2]){returnN-1;}intL0;intRN-1;// L...R 肯定有局部最小while(LR-1){intmid(LR)/2;if(arr[mid]arr[mid-1]arr[mid]arr[mid1]){returnmid;}else{if(arr[mid]arr[mid-1]){Rmid-1;}else{Lmid1;}}}returnarr[L]arr[R]?L:R;}// 生成随机数组且相邻数不相等publicstaticint[]randomArray(intmaxLen,intmaxValue){intlen(int)(Math.random()*maxLen);int[]arrnewint[len];if(len0){arr[0](int)(Math.random()*maxValue);for(inti1;ilen;i){do{arr[i](int)(Math.random()*maxValue);}while(arr[i]arr[i-1]);}}returnarr;}// 也用于测试publicstaticbooleancheck(int[]arr,intminIndex){if(arr.length0){returnminIndex-1;}intleftminIndex-1;intrightminIndex1;booleanleftBiggerleft0?arr[left]arr[minIndex]:true;booleanrightBiggerrightarr.length?arr[right]arr[minIndex]:true;returnleftBiggerrightBigger;}publicstaticvoidprintArray(int[]arr){for(intnum:arr){System.out.print(num );}System.out.println();}publicstaticvoidmain(String[]args){intmaxLen100;intmaxValue200;inttestTime1000000;System.out.println(测试开始);for(inti0;itestTime;i){int[]arrrandomArray(maxLen,maxValue);intansoneMinIndex(arr);if(!check(arr,ans)){printArray(arr);System.out.println(ans);break;}}System.out.println(测试结束);}}时间复杂度基础–04----时间、空间复杂度哈希表哈希表可以看成一个(K V)表哈希表的增删改查,时间复杂度都可以看成 O(1)哈希表分类:引用传递按值传递HashMap基础类型 : int double char string ------按值传递publicstaticvoidmain(String[]args){HashMapInteger,Stringmap2newHashMap();map2.put(1234567,我是1234567);Integera1234567;Integerb1234567;System.out.println(ab);System.out.println(map2.containsKey(a));System.out.println(map2.containsKey(b));}对象类型 : int double char string ------引用传递importjava.util.HashMap;importjava.util.TreeMap;publicclassCode05_HashMapTreeMap{publicstaticclassNode{publicintvalue;publicNode(intv){valuev;}}// (K V)表publicstaticvoidmain(String[]args){Nodenode1newNode(1);Nodenode2newNode(1);HashMapNode,Stringmap3newHashMap();map3.put(node1,我进来了);System.out.println(map3.containsKey(node1));System.out.println(map3.containsKey(node2));}}有序表TreeMap的增删改查,时间复杂度都可以看成 O(n)java数据结构TreeMappublicstaticvoidmain(String[]args){TreeMapInteger,StringtreeMap1newTreeMap();treeMap1.put(3,我是3);treeMap1.put(0,我是3);treeMap1.put(7,我是3);treeMap1.put(2,我是3);treeMap1.put(5,我是3);treeMap1.put(9,我是3);System.out.println(treeMap1.containsKey(7));System.out.println(treeMap1.containsKey(6));System.out.println(treeMap1.get(3));treeMap1.put(3,他是3);System.out.println(treeMap1.get(3));treeMap1.remove(3);System.out.println(treeMap1.get(3));System.out.println(treeMap1.firstKey());System.out.println(treeMap1.lastKey());// 5 离5最近的key告诉我System.out.println(treeMap1.floorKey(5));// 6 离6最近的key告诉我System.out.println(treeMap1.floorKey(6));// 5 离5最近的key告诉我System.out.println(treeMap1.ceilingKey(5));// 6 离6最近的key告诉我System.out.println(treeMap1.ceilingKey(6));// Node node3 new Node(3);// Node node4 new Node(4);// TreeMapNode, String treeMap2 new TreeMap();// treeMap2.put(node3, 我是node3);// treeMap2.put(node4, 我是node4);}TreeMap 的key 一定要能够比较,不然会报错importjava.util.TreeMap;publicclassCode05_HashMapTreeMap{publicstaticclassNode{publicintvalue;publicNode(intv){valuev;}}publicstaticvoidmain(String[]args){TreeMapInteger,StringtreeMap1newTreeMap();Nodenode3newNode(3);Nodenode4newNode(4);TreeMapNode,StringtreeMap2newTreeMap();treeMap2.put(node3,我是node3);treeMap2.put(node4,我是node4);}}

相关新闻

符号表--01---概述与实现

符号表--01---概述与实现

符号表 定义: 符号表最主要的目的就是将一个键和一个值联系起来,符号表能够将存储的数据元素是一个键和一个值共同组成的键值对数据,我们可以根据键来查找对应的值。符号表中,键具有唯一性。使用场景: 符号表在实际生活中的使用场景是非常广泛…

2026/8/25 7:44:28 阅读更多 →
I2C协议进阶:快速模式、高速模式与10位寻址详解

I2C协议进阶:快速模式、高速模式与10位寻址详解

1. 从标准模式到性能跃迁:为什么需要更快的I2C?搞嵌入式开发的朋友,对I2C(Inter-Integrated Circuit)协议肯定不陌生。它那两根线(SDA数据线、SCL时钟线)的简洁设计,让连接多个低速外…

2026/8/25 7:44:28 阅读更多 →
Mendeley文献管理实战:从高效导入到精准引用,打造个人学术知识库

Mendeley文献管理实战:从高效导入到精准引用,打造个人学术知识库

1. 从文献混乱到高效管理:为什么我坚持用Mendeley如果你和我一样,每天需要和几十甚至上百篇PDF文献打交道,那你一定经历过这种痛苦:电脑桌面或下载文件夹里堆满了以“paper1_final_revised.pdf”这种毫无意义命名的文件&#xff1…

2026/8/25 7:44:28 阅读更多 →

最新新闻

MoneyManagerEx 备份与恢复完整指南:3种方法防止多年账本数据丢失

MoneyManagerEx 备份与恢复完整指南:3种方法防止多年账本数据丢失

MoneyManagerEx 备份与恢复完整指南:3种方法防止多年账本数据丢失 【免费下载链接】android-money-manager-ex Local-first personal finance app. Encrypted, self-hosted, sync across devices. 项目地址: https://gitcode.com/gh_mirrors/an/android-money-man…

2026/8/25 8:32:48 阅读更多 →
Open Distro for Elasticsearch SQL开发者指南:从零构建插件、运行测试到提交第一个PR

Open Distro for Elasticsearch SQL开发者指南:从零构建插件、运行测试到提交第一个PR

Open Distro for Elasticsearch SQL开发者指南:从零构建插件、运行测试到提交第一个PR 【免费下载链接】sql 🔍 Open Distro SQL Plugin 项目地址: https://gitcode.com/gh_mirrors/sq/sql Open Distro for Elasticsearch SQL 插件让你用熟悉的 S…

2026/8/25 8:32:48 阅读更多 →
如何用 Socket.IO 实现实时多人对战:GameHub.io 的 join、new-move、resign 事件流全拆解

如何用 Socket.IO 实现实时多人对战:GameHub.io 的 join、new-move、resign 事件流全拆解

如何用 Socket.IO 实现实时多人对战:GameHub.io 的 join、new-move、resign 事件流全拆解 【免费下载链接】gamehub.io Real-time multiplayer game server based on Node Express SocketIO MongoDB ElasticSearch 项目地址: https://gitcode.com/gh_mirrors/…

2026/8/25 8:32:48 阅读更多 →
带登录脚本的管理员账号有多危险:ScriptSentry与GPO劫持攻击链完整剖析

带登录脚本的管理员账号有多危险:ScriptSentry与GPO劫持攻击链完整剖析

带登录脚本的管理员账号有多危险:ScriptSentry与GPO劫持攻击链完整剖析 【免费下载链接】ScriptSentry ScriptSentry finds misconfigured and dangerous logon scripts. 项目地址: https://gitcode.com/gh_mirrors/sc/ScriptSentry ScriptSentry 是一款免费…

2026/8/25 8:32:48 阅读更多 →
AI大模型面试核心考察方向与高频问题解析

AI大模型面试核心考察方向与高频问题解析

1. AI大模型面试核心考察方向解析在当前的AI技术招聘中,大模型相关岗位的面试通常围绕五个核心维度展开:模型原理深度、工程实践能力、业务场景理解、前沿技术跟踪和代码实现水平。作为面试官,我设计的技术面问题往往从这五个角度切入&#x…

2026/8/25 8:31:48 阅读更多 →
腾讯Java后端面试解析:大模型Agent架构与高并发优化

腾讯Java后端面试解析:大模型Agent架构与高并发优化

1. 腾讯Java后端实习二面技术复盘:核心考察点解析去年夏天,我在腾讯某核心业务部门的二面经历让我对Java后端工程师的能力模型有了全新认知。这场持续75分钟的技术面谈,完全颠覆了我对"八股文面试"的刻板印象——面试官没有纠结于琐…

2026/8/25 8:31:48 阅读更多 →

日新闻

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

2026/8/25 0:00:34 阅读更多 →
Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG 【免费下载链接】transformers.js State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server! 项目地址: https:/…

2026/8/25 0:00:34 阅读更多 →
数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

1. 项目概述:从“会做”到“会写”的竞赛核心跃迁“全国大学生数学建模竞赛”,这个名字对理工科学生来说,分量极重。每年,无数团队在三天三夜的时间里,为一个开放性问题绞尽脑汁,从建立模型、求解算法到编程…

2026/8/25 0:00:34 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 3:38:12 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 3:38:18 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 3:38:23 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/24 20:22:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/24 11:20:22 阅读更多 →