算法基础——双指针练习3
2021/6/8 22:21:32
本文主要是介绍算法基础——双指针练习3,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
双指针练习3
一、PAT甲级1048(题目已经过翻译)
1、题目描述
Eva去商场购物,他有各种面值的钱,他希望付款时只用两枚硬币。
输入格式,第一行输入N表示元素个数,输入M表示总价;第二行,输入各个面值的硬币
题意:给出一个数组中的若干个元素,现在给出一个和,要求从数组中找到两个元素,这两个元素求和结果与给出的期望和一致,如果存在则输出两个元素,不存在则返回No Solution
输入整数m,从n个元素的数组中找出两个元素a,b;a<=b;要求a+b=m,如果有多对结果则输出a最小的那一对。
2、算法思路
这道题有很多种方法求结果,这里我只做一种双指针的解法
方法一:暴力求解,对数组中元素依次求和,找出满足要求的所有可能下标,如果有多对解,就对a的值进行比较,每次都选择a最小的一对
分析:显然这个算法时间复杂度为O(n^2),因为要使用两个指针依次遍历数组。
方法二:可以先让数组变有序,然后遍历数组找出符合要求的结果
分析:好的排序算法时间复杂度为O(nlogn),最后一次遍历时间复杂度为O(n),所以时间复杂度为O(nlogn)
3、算法描述
(1)对输入序列进行sort排序
(2)定义两个指针i和j,让i指向A[0],j指向A[n]
(3)开始时移动j,让j递减,直到*j<=m
(4)开始计算*i+*j;如果相等则返回*i,*j;如果>m就让j--;如果小于m就让i++
4、核心代码
5、总结
这道题除了这种解法还有一种更好的解法,就是拿空间换时间,可以构造一个键值对,当然,可以构造很多种键值对,只要逻辑上满足即可。
这篇关于算法基础——双指针练习3的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南