PAT:1048. Find Coins (25)(双指针法) AC

#include<stdio.h>
#include<algorithm>
using namespace std;

int arr[100066];

int main()
{
  int n,m;
  scanf("%d%d",&n,&m);
  for(int i=0 ; i<n ; ++i)
    scanf("%d",&arr[i]);
  sort(arr,arr+n);

  int l=0,r=n-1;            //左右指针
  while(l<r)              //【caution】这里不能有“=”,等于的话进去l=r同一个坐标不可能2个数
  {
    int tmp=arr[l]+arr[r];
    if(tmp==m)            //左右指针指向的数字之和等于m,即找到
    {
      printf("%d %d",arr[l],arr[r]);
      return 0;
    }
    else if(tmp<m)          //之和小于m,左指针后移,增大tmp
      ++l;
    else              //之和大于m,右指针前移,减小tmp
      --r;
  }
  printf("No Solution");
  return 0;
}
时间: 2024-10-10 08:13:04

PAT:1048. Find Coins (25)(双指针法) AC的相关文章

PAT:1048. Find Coins (25)(哈希表法) AC

#include<stdio.h> #include<string.h> int HARSH[1066]; int main() { memset(HARSH,0,sizeof(HARSH)); int n,m; scanf("%d%d",&n,&m); for(int i=0 ; i<n ; ++i) { int tmp; scanf("%d",&tmp); ++HARSH[tmp]; } for(int i=

PAT:1048. Find Coins (25)(二分查找) AC

#include<stdio.h> #include<algorithm> using namespace std; int arr[100066]; int FIND(int l,int r,int aim) //二分查找,从l到r,查找aim { int mid; while(l<=r) { mid=(l+r)/2; if(arr[mid]==aim) return mid; //找到:返回坐标 else if(arr[mid]<aim) l=mid+1; else

【PAT甲级】1048 Find Coins (25 分)(二分)

题意: 输入两个正整数N和M(N<=10000,M<=1000),然后输入N个正整数(<=500),输出两个数字和恰好等于M的两个数(小的数字尽可能小且输出在前),如果没有输出"No Solution". 代码: #define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;int a[100007];int main(){ ios::sync_with_stdio(false

PAT 1048. Find Coins

two sum题目,算是贪婪吧 #include <cstdio> #include <cstdlib> #include <vector> #include <algorithm> using namespace std; int main() { int N, M; scanf("%d%d", &N, &M); vector<int> coins(N); for (int i=0; i<N; i++)

1048. Find Coins (25)

题目例如以下: Eva loves to collect coins from all over the universe, including some other planets like Mars. One day she visited a universal shopping mall which could accept all kinds of coins as payments. However, there was a special requirement of the pa

pat1048. Find Coins (25)

1048. Find Coins (25) 时间限制 50 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Eva loves to collect coins from all over the universe, including some other planets like Mars. One day she visited a universal shopping mall which could accept a

第一篇博客园--双指针法小记

问题: 对于一个任意的自然数,问是否能将其拆分成2个或2个以上的连续自然数之和,写出所有的等式. 解题思路: 第一种解法是推导出数学公式,因为连续的自然数可以用等差数列Sn求和公式,判断可行性.公式推导以及证明过程:数学解法: 第二种解法是直接穷举解法,不过对于较大的数字复杂度O(n^2)可能不够解决,由于连续的自然数一定是递增状态,我们可以用尺取法,也就是双指针法将复杂度降低到O(n) 双指针解法: #include <bits/stdc++.h> using namespace std;

LeetCode刷题总结之双指针法

Leetcode刷题总结 目前已经刷了50道题,从零开始刷题学到了很多精妙的解法和深刻的思想,因此想按方法对写过的题做一个总结 双指针法 双指针法有时也叫快慢指针,在数组里是用两个整型值代表下标,在链表里是两个指针,一般能实现O(n)的时间解决问题,两个指针的位置一般在第一个元素和第二个元素或者第一个元素和最后一个元素,快指针在前“探路”,当符合某种条件时慢指针向前挪 盛最多水的容器 这道题其实是求最大面积,最大面积取决于较小值.初始时两指针分别位于第一和最后一个元素处,那么明确指针应该向什么方

【bzoj2096】[Poi2010]Pilots 双指针法+STL-set

题目描述 Tz又耍畸形了!!他要当飞行员,他拿到了一个飞行员测试难度序列,他设定了一个难度差的最大值,在序列中他想找到一个最长的子串,任意两个难度差不会超过他设定的最大值.耍畸形一个人是不行的,于是他找到了你. 输入 输入:第一行两个有空格隔开的整数k(0<=k<=2000,000,000),n(1<=n<=3000,000),k代表Tz设定的最大值,n代表难度序列的长度.第二行为n个由空格隔开的整数ai(1<=ai<=2000,000,000),表示难度序列. 输出