某支付公司笔试编程题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | /** * 最后一题的编程题 * 判断数组A(小数组) 是 数组B(大数组)的子集 数组都是有序且是整型数组 */ public class OptimizeTest { public static void main(String[] args) { // method01(); boolean b = method02(); System.out.println(b); } private static boolean method02() { int [] bigArr = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 }; int [] smallArr = { 5 , 6 , 7 }; //技术总监优化的方案 //先排除掉 压根没有重叠的元素 //在根据个数进行排除 //最后没有排除项了,在一一比较 //能最大限度的提高效率 if (bigArr[ 0 ] > smallArr[smallArr.length - 1 ]){ return false ; } else if (smallArr[ 0 ] > bigArr[bigArr.length - 1 ]){ return false ; } else { // int[] newBigArr = null; int start = 0 ; int end = 0 ; for ( int i = 0 ;i < bigArr.length;i++){ if (bigArr[i] > smallArr[ 0 ]){ start = i - 1 ; break ; } } for ( int i = bigArr.length - 1 ;i > 0 ;i--){ if (bigArr[i] < smallArr[smallArr.length - 1 ]){ end = i + 1 ; break ; } } System.out.println(start); System.out.println(end); int len = end - start + 1 ; if (len != smallArr.length){ return false ; } else { bigArr = subArr(bigArr, start, end); } for ( int i = 0 ;i < bigArr.length;i++){ int m = 0 ; int k = i; for ( int j = 0 ;j < smallArr.length;j++){ if (bigArr[k] == smallArr[j]){ m++; k++; } } if (m == smallArr.length){ return true ; } } } return false ; } /** * 截取数组 * @param bigArr * @param start * @param end * @return */ private static int [] subArr( int [] bigArr, int start, int end) { int [] newBigArr = new int [end - start + 1 ]; int i = 0 ; while (start <= end){ newBigArr[i++] = bigArr[start]; start ++; } return newBigArr; } private static boolean method01() { int [] bigArr = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 }; int [] smallArr = { 5 , 6 , 7 }; //我面试时的方案 for ( int i = 0 ;i < bigArr.length;i++){ int m = 0 ; int k = i; for ( int j = 0 ;j < smallArr.length;j++){ if (bigArr[k] == smallArr[j]){ m++; k++; } } if (m == smallArr.length){ return true ; } } return false ; } } |
结论: 我的方案没有考虑到效率,只是单纯完成了题目,对于数组小而言是没有什么问题的,但是一旦数组十分庞大时,效率就很低了,遍历一个一个比较,想想都有点可怕.......后面总监提醒了之后我回去按照他的思路实现了一下,先排除 没有交际的情况,在排除个数不相等的情况,在进行比较,比较的次数降低了,自然效率就高了。
以上个人测试,如有更好的方案,欢迎留言。
关于http协议
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!