狸猫的笔试——查找
来源:互联网 发布:爱普生t50清零软件 编辑:程序博客网 时间:2024/04/28 07:55
输入:
一个递增排序的数组
一个数字S
要求:
在数组中查找两个数,使他们的和正好是S,如果有多对数字的和是S,则输出两个数乘积最小的
输出:
两个数
javaCode
最好情况下,时间复杂度为O(n/2)
public static void sum(int[] arr, int s) {// 数组长度不够if (arr.length <= 1) {System.out.println("error");return;}boolean mark = false;// 让i、j指向数组的中间的两位int i = arr.length / 2 - 1;int j = i + 1;// 将两个数初始化为arr的最大值int num1 = arr[arr.length - 1] + 1;int num2 = arr[arr.length - 1] + 1;// 如果越界,或者i,j重合则结束while (i >= 0 && j < arr.length && (i != j)) {if (i == 0 && j == arr.length - 1)mark = true;// ==s时,i,j都往边缘走if (arr[i] + arr[j] == s) {if (arr[i] * arr[j] < num1 * num2) {num1 = arr[i];num2 = arr[j];}if (j == arr.length - 1 && i == j - 1)break;if (mark)++i;else--i;} else if (arr[i] + arr[j] > s) {// 如果大于s,则i应减小// 如果i移到边缘,则j应减小if (i == 0)--j;else if (mark)--j;else--i;} else {// 如果小于s 则j应增大// 如果j移动到边缘,则i应增大if (j >= arr.length - 1)++i;else if (mark)++i;else++j;}}// 如果num1 和 numif (num1 + num2 == s) {System.out.println(num1 + " " + num2);} else {System.out.println("Error" + num1 + " " + num2);}}
0 0
- 狸猫的笔试——查找
- 狸猫的笔试——蛇形矩阵
- 狸猫的笔试——格雷码判断
- 狸猫的笔试——集合
- 狸猫的笔试——n位格雷码的生成
- 狸猫的笔试——字符转int
- 狸猫的笔试——镜像字符串(二叉树法)
- 狸猫的面试——链表
- 狸猫的面试——JVM综述
- 狸猫的面试——JVM内存回收
- 狸猫的面试——项目描述——矢量裁剪
- 狸猫的面试——项目描述——视频通信
- Python mock测试static 方法——狸猫换太子
- C/C++ 笔试面试(2)——二分查找 的确遇到的笔试题
- 狸猫哥哥和他的冬葵花
- C语言笔试题(3)——查找子串出现的次数
- C语言笔试题(4)——二分法查找
- C/C++ 笔试面试(2)——二分查找
- python-MySQL学习笔记-第三章-利用Connector/Python来插入数据
- CentOS 7.0安装Zimbra 8.6邮件服务器
- ggplot2-绘制散点图
- oracle学习 第一章 简单的查询语句 ——01
- 当没有网络时,用intent去设置网络
- 狸猫的笔试——查找
- 内核线程与用户线程
- 关于浏览器URL重写的问题(Thinkphp框架):
- HDOJ 2057 A + B Again
- Whu oj Problem 1603 - Minimum Sum
- 内嵌事件处理函数的解决办法 用户在点击某个链接时弹出一个新的窗口。
- 启动流程与主要启动记录区(MBR)
- 2016华为笔试题——整数之循环节点求和
- 2010年山东省第一届ACM解SDUT2151-2160 set,floyd变形