经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 编程经验 » 查看文章
LeetCode.1200-最小绝对值差(Minimum Absolute Difference)
来源:cnblogs  作者:程序员小川  时间:2019/10/8 9:09:49  对本文有异议

这是小川的第418次更新,第451篇原创


看题和准备

今天介绍的是LeetCode算法题中Easy级别的第268题(顺位题号是1200)。给定一个由不同的整数组成的数组arr,找到所有对元素,其中任意两个元素的绝对差值都最小。

以升序返回关于配对的列表(相对于配对),每对[a,b]紧随其后:

  • a,b来自arr
  • a < b
  • b-a等于arr中任何两个元素的最小绝对差

例如:

输入:arr = [4,2,1,3]
输出:[[1,2],[2,3],[3,4]]
说明:最小绝对差为1。以升序列出所有差等于1的对。

输入:arr = [1,3,6,10,15]
输出:[[1,3]]

输入:arr = [3,8,-10,23,19,-4,-14,27]
输出:[[-14,-10],[19,23],[23,27]]

限制条件

  • 2 <= arr.length <= 10^5
  • -10^6 <= arr[i] <= 10^6

第一种解法

直接翻译题目即可,分两步走,第一,找到数组arr中的最小绝对差值,通过排序来完成,借助Arrayssort方法实现,因为绝对值差最小的两个数肯定是相邻越近越小。第二,再次遍历arr数组,将绝对值差等于最小绝对值差的两个元素添加到结果list中去。

  1. public List<List<Integer>> minimumAbsDifference(int[] arr) {
  2. Arrays.sort(arr);
  3. int min = Integer.MAX_VALUE, len = arr.length;
  4. for (int i=1; i<len; i++) {
  5. min = Math.min(min, arr[i]-arr[i-1]);
  6. }
  7. List<List<Integer>> result = new ArrayList<List<Integer>>();
  8. for (int i=1; i<len; i++) {
  9. if (arr[i]-arr[i-1] == min) {
  10. List<Integer> list = new ArrayList<Integer>();
  11. list.add(arr[i-1]);
  12. list.add(arr[i]);
  13. result.add(list);
  14. }
  15. }
  16. return result;
  17. }


第二种解法

针对第一种解法,我们还可以简化下,只使用一个循环。在循环里判断最小绝对值差,如果当前两元素的绝对值小于最小绝对值差,则更新最小绝对值差的值,同时将结果list清空,这里清空list有两种办法,一是重新创建对象,二是使用clear方法,推荐第一种重新创建对象的做法,将两元素存入结果list中。

  1. public List<List<Integer>> minimumAbsDifference2(int[] arr) {
  2. Arrays.sort(arr);Arrays.sort(arr);
  3. int min = Integer.MAX_VALUE, len = arr.length;
  4. List<List<Integer>> result = new ArrayList<List<Integer>>();
  5. for (int i=1; i<len; i++) {
  6. if (arr[i] - arr[i-1] <= min) {
  7. if (arr[i] - arr[i-1] < min) {
  8. min = arr[i] - arr[i-1];
  9. result = new ArrayList<List<Integer>>();
  10. }
  11. result.add(Arrays.asList(arr[i-1], arr[i]));
  12. }
  13. }
  14. return result;
  15. }


小结

算法专题目前已更新LeetCode算法题文章274+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞留言在看就是对我最大的回报和支持!

原文链接:http://www.cnblogs.com/xiaochuan94/p/11628402.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号