博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《剑指 Offer》——42、和为 S 的两个数
阅读量:2343 次
发布时间:2019-05-10

本文共 1080 字,大约阅读时间需要 3 分钟。

1. 本题知识点

双指针

2. 题目描述

输入一个递增排序的数组和一个数字 S,在数组中查找两个数,使得他们的和正好是 S,如果有多对数字的和等于 S,输出两个数的乘积最小的。

3. 解题思路

  1. 使用双指针,一个指针指向元素较小的值,一个指针指向元素较大的值。指向较小元素的指针从头向尾遍历,指向较大元素的指针从尾向头遍历。

  2. 如果两个指针指向元素的和 sum < S,移动较小的元素指针,使 sum 变大一些。

  3. 如果两个指针指向元素的和 sum > S,移动较大的元素指针,使 sum 变小一些。

  4. 如果两个指针指向元素的和 sum == S,那么返回这两个元素。

4. 代码

import java.util.ArrayList;import java.util.Arrays;public class Solution {
public ArrayList
FindNumbersWithSum(int[] array, int sum) {
// 一个指针指向元素较小的值 int low = 0; // 一个指针指向元素较大的值 int high = array.length - 1; while (low < high) {
// 两个指针指向元素的和 s int s = array[low] + array[high]; // 如果 s == sum,那么返回这两个元素。 if (s == sum) {
return new ArrayList<>(Arrays.asList(array[low], array[high])); } // 如果 s < sum,移动较小的元素指针,使 s 变大一些。 else if (s < sum) {
low++; } // 如果 s > sum,移动较大的元素指针,使 s 变小一些。 else {
high--; } } return new ArrayList<>(); }}

转载地址:http://lyjvb.baihongyu.com/

你可能感兴趣的文章
整型字符常量和字符字面量的区别 sizeof(char) 和 sizeof('a')
查看>>
表的主键特点中,说法不正确的是()
查看>>
用变量a给出下面的定义:一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整型数
查看>>
冯诺依曼工作方式的基本特点是____
查看>>
下列关于文件索引结构的叙述中,哪些是正确的?
查看>>
虚拟存储的容量受到下列哪一个因素的限制影响最大?
查看>>
Java程序优化的一些最佳实践
查看>>
《速度与激情8》中的信息安全技术
查看>>
超级互联网公司如何评估IT运营水平?
查看>>
多线程中start()与run()方法的区别
查看>>
使用My97DatePicker插件(现在基本使用前端框架自带的时间控件)
查看>>
Failed to convert from type java.lang.String to type java.util.Date for value解决办法
查看>>
MySQL数据库中的Date,DateTime和TimeStamp类型
查看>>
关于海量数据问题的解决方案
查看>>
给定一个数组,求前k小或者前k大
查看>>
程序员,你为什么值这么多钱?
查看>>
招聘面试的套路与原则
查看>>
技术与技术人员的价值
查看>>
对于垃圾回收相关的建议
查看>>
JVM调优魔法棒-Java VisualVM
查看>>