当前位置: 首页 > news >正文

面试算法6:排序数组中的两个数字之和

题目

输入一个递增排序的数组和一个值k,请问如何在数组中找出两个和为k的数字并返回它们的下标?假设数组中存在且只存在一对符合条件的数字,同时一个数字不能使用两次。例如,输入数组[1,2,4,6,10],k的值为8,数组中的数字2与6的和为8,它们的下标分别为1与3。

分析

存在时间复杂度是O(n)、空间复杂度是O(1)的解法。我们用两个指针P1和P2分别指向数组中的两个数字。指针P1初始化指向数组的第1个(下标为0)数字,指针P2初始化指向数组的最后一个数字。如果指针P1和P2指向的两个数字之和等于输入的k,那么就找到了符合条件的两个数字。如果指针P1和P2指向的两个数字之和小于k,那么我们希望两个数字的和再大一点。由于数组已经排好序,因此可以考虑把指针P1向右移动。因为在排序数组中右边的数字要大一些,所以两个数字的和也要大一些,这样就有可能等于输入的数字k。同样,当两个数字的和大于输入的数字k时,可以把指针P2向左移动,因为在排序数组中左边的数字要小一些。

public class Test {public static void main(String[] args) {int[] nums = {1, 2, 4, 6, 10};int[] result = towSum(nums, 8);for (int res : result) {System.out.println(res);}}public static int[] towSum(int[] numbers, int target) {int i = 0;int j = numbers.length - 1;while (i < j && numbers[i] + numbers[j] != target) {if (numbers[i] + numbers[j] < target) {i++;}else {j--;}}return new int[] {i, j};}
}
http://www.lryc.cn/news/167422.html

相关文章:

  • 【智能家居-大模型】构建未来,聆思大模型智能家居交互解决方案正式发布
  • 通讯网关软件002——利用CommGate X2HTTP-U实现HTTP访问OPC UA Server
  • 模拟经营类游戏是怎么开发的?
  • 基于JAVA+SSM+微信小程序+MySql的图书捐赠管理系统设计与实现
  • 软件设计模式系列之六——单例模式
  • verdi dump状态机的波形时直接显示状态名
  • 代码随想录算法训练营19期第53天
  • 二刷力扣--栈和队列
  • 第六章 图 十、关键路径
  • Virtualbox固定存储硬盘转换为动态存储硬盘
  • 【栈与队列面试题】有效的括号(动图演示)
  • 基于matlab实现的弹簧振动系统模型程序(动态模型)
  • 哨兵1号(Sentinel-1)SAR卫星介绍
  • [maven] scopes 管理 profile 测试覆盖率
  • css网页打印字体设置
  • JAVA高级技术入门(单元测试,反射,注解,动态代理)
  • uni-app 实现自定义按 A~Z 排序的通讯录(字母索引导航)
  • C++ PrimerPlus 复习 第一章 命令编译链接文件 make文件
  • 微信小程序——常用组件的属性介绍
  • 【深度学习】 Python 和 NumPy 系列教程(廿七):Matplotlib详解:3、多子图和布局:散点矩阵图(Scatter Matrix Plot)
  • 解决jupyter打开的默认路径问题
  • Git 学习笔记
  • 【Qt】QGroundControl入门3:源码初探
  • 腾讯mini项目-【指标监控服务重构】2023-07-31
  • Rust通用编程概念(3)
  • 学Python的漫画漫步进阶 -- 第四步
  • 【LeetCode-中等题】18. 四数之和
  • 每日一题 102二叉树的层序遍历
  • 牛客: BM4 合并两个排序的链表
  • C语言基础知识点(六)二维数组指针和地址