数据结构与算法(30)——查找习题(二)
来源:互联网 发布:大数据挖掘系统 编辑:程序博客网 时间:2024/06/16 09:34
* 题目:给定一个含n个元素的数组,在数组中查找两个元素,这两个元素的和等于给定的元素K * 思路: * 1.先将数组排序 * 2.设置索引low=0,high=n-1,并计算sum=A[low]+A[high] * 3.如果sum==k,则直接输出当前元素对的索引 * 4.如果sum>k,则high减一 * 5.如果sum<k,则low加一
public static void search(int[] array, int k) { // 先对数组进行排序 Sort.bubbleSortImproved(array); int sum; int low = 0; int high = array.length - 1; while (low < high) { sum = array[low] + array[high]; if (sum == k) { System.out.println("Items Found, low:" + low + " high:" + high); return; } else if (sum < k) { low++; } else { high--; } } System.out.println("Items No Found: No Such Elements !");}
* 题目:查找和最接近0的两个元素:给定一个包含正数和负数的数组,查找两个元素,使得它们的和最接近0. * 例如:对于数组A = {1, 60, -10, 70, -80, 85},算法找到的两个元素为-80 和 85 * 思路: * 1.对给定的数组排序,positiveClosest表示最小正数和,negativeClosest表示最小负数和 * 2.设置索引low=0,high=n-1,并计算sum=A[low]+A[high] * 3.如果sum大于0且小于positiveClosest,则更新positiveClosest * 4.如果sum小于0且大于negativeClosest,则更新negativeClosest * 5.如果sum等于0则直接输出当前元素对
public static void twoElementsWithMinSum(int[] array) { // 先对数组进行排序 Sort.bubbleSortImproved(array); // 初始化最小正数和以及最小负数和 int positiveClosest = Integer.MAX_VALUE; int negativeClosest = Integer.MIN_VALUE; // 初始化最小正数和的元素对索引 int positive_low = 0; int positive_high = array.length - 1; // 初始化最小负数和的元素对索引 int negative_low = 0; int negative_high = array.length - 1; // 数组元素的和 int sum; // 数组的索引 int low = 0; int high = array.length - 1; while (low < high) { sum = array[low] + array[high]; if (sum > 0) { if (sum < positiveClosest) { positiveClosest = sum; positive_low = low; positive_high = high; } high--; } else if (sum < 0) { if (sum > negativeClosest) { negativeClosest = sum; negative_low = low; negative_high = high; } low++; } else { // 数组元素和为0 System.out.println("Elements:" + array[low] + " And " + array[high]); return; } } // 判断元素对 if (Math.abs(positiveClosest) > Math.abs(negativeClosest)) { System.out.println("Elements:" + array[negative_low] + " And " + array[negative_high]); } else { System.out.println("Elements:" + array[positive_low] + " And " + array[positive_high]); }}
测试代码,敬请参考数据结构与算法(JAVA版)
阅读全文
0 0
- 数据结构与算法(30)——查找习题(二)
- 数据结构与算法(11)——栈习题二
- 数据结构与算法(15)——队列习题二
- 数据结构与算法(29)——查找习题(一)
- 数据结构与算法(31)——查找习题(三)
- 数据结构与算法(19)——二叉树习题二
- 数据结构与算法js描述(习题二答案)
- 数据结构与算法(6)——单链表习题一
- 数据结构与算法(10)——栈习题一
- 数据结构与算法(12)——栈习题三
- 数据结构与算法(14)——队列习题一
- 数据结构与算法(24)——堆习题
- 数据结构与算法(33)——字符串习题
- 数据结构与算法--查找与排序(二)
- 数据结构、算法与应用--习题(1)
- 数据结构与算法——二分查找(C语言)
- 数据结构与算法(28)——查找
- 数据结构与算法(二分查找算法)
- WebBench源码剖析(中)
- jsplumb使用说明自编版
- leetcode 26, 27, 283
- 信号处理第八课:函数空间和函数表达
- 数据库的入门知识
- 数据结构与算法(30)——查找习题(二)
- 独木舟上的旅行
- spring学习总结
- 矩阵乘法优化递归式
- 设计模式 — 工厂方法模式(Factory Method)
- java 二叉树三种遍历(递归非递归)
- 最近公共祖先(LCA)算法实现过程 【Tarjan离线+倍增在线+RMQ】
- boa源码解析(1)-接收请求,发送html的流程
- TCP/IP、Http、Socket、XMPP-从入门到深入