首页 > 其他分享 >800. 数组元素的目标和(双指针,二分)

800. 数组元素的目标和(双指针,二分)

时间:2023-03-14 17:33:56浏览次数:55  
标签:二分 cout int mid 数组 800 指针

https://www.acwing.com/problem/content/802/
二分:
枚举a,
对于每一个a[i],都二分一下求x-a[i],是否在b数组中

#include<iostream>

using namespace std;

const int N = 1e5+10;

int n,m,x;
int a[N],b[N];
int ansx,ansy;
int main()
{
    cin >> n >> m >> x;
    for(int i=0;i<n;i++)cin >> a[i];
    for(int i=0;i<m;i++)cin >> b[i];
    for(int i=0;i<n;i++)
    {
        int y=x-a[i];//此时所求b数组的值
        //二分b数组,寻找满足的下标
        int l=0,r=m-1;
        while(l<=r)
        {
            int mid=l+r+1>>1;
            if(y==b[mid])
            {
                cout << i << ' ' << mid << endl;
                return 0;
            }
            else if(y>b[mid]) l=mid+1;
            else r=mid-1;
        }
    }
    
    return 0;
}

双指针:
首先考虑暴力:

for(int i=0;i<n;i++)
    for(int j=0;j<m;j++)
        if(a[i]+b[j]==x)
            find_ans

这样想:i从0~n,j从m-1~0,那么对于每一个i,j,判断是否满足(i,j)之和为x,这样j就不会像纯暴力那样会回溯了
那么就具有单调性,可以用双指针优化

#include<iostream>

using namespace std;

const int N = 1e5+10;

int n,m,x;
int a[N],b[N];
int ansx,ansy;
int main()
{
    cin >> n >> m >> x;
    for(int i=0;i<n;i++)cin >> a[i];
    for(int i=0;i<m;i++)cin >> b[i];
    for(int i=0,j=m-1;i<n;i++)
    {
        
        while(j>=0 && a[i]+b[j]>x)j--;
        if(a[i]+b[j]==x)
        {
            cout << i << ' ' << j << endl;   
            return 0;
        }
    }
    return 0;
}

 

标签:二分,cout,int,mid,数组,800,指针
From: https://www.cnblogs.com/lxl-233/p/17215700.html

相关文章

  • 二分查找法
    二分查找法functionbinarySearch($arr,$val,$hight,$low=0){$i=0;while($low<=$hight){$i++;$mid=ceil(......
  • PageOffice打开word时出现Office运行时错误,部分系统文件可能丢失或已损坏.(错误代码:
    本文转自:https://it.cha138.com/java/show-125818.html用PageOffice打开word时出现Office运行时错误,部分系统文件可能丢失或已损坏.(错误代码:0x80040154) 部分原因......
  • c/c++指针从浅入深介绍——基于数据内存分配的理解(上)
    c/c++指针从浅入深介绍——基于数据内存分配的理解(上)本文是对自我学习的一个总结以及回顾,文章内容主要是针对代码中的数据在内存中的存储情况以及存储中数值的变化来......
  • C语言指针进阶(一)
    前言什么是指针?指针就是一个可以存储地址的变量。当我们将具体的某个对象的地址存放到某个指针变量当中时,我们可以说将某个对象的地址存放到某个指针当中,也可以说指向某个对......
  • 指针的运算
    1、指针关系运算比较两个指针(地址)的大小2、指针加减整数运算根据指针的类型,判断指针加减整数的步长。3、指针-指针的运算指针减去指针得到的是两个指针之间相差的元素个数!指......
  • CH582 CH592 CH573 PC指针打印(排查程序运行+死循环指示)
    代码调试如果需要程序死循环,又不晓得停在哪,可以通过打印PC指针进行定位,具体方法如下比如开启看门狗中断,开发方法参考CH573CH582CH579看门狗使用-debugdabiaoge-博......
  • 无法获取本地变量或参数的值,因为它在此指令指针中不可用,可能是因为它已经被优化掉了
    问题:调试时,变量的值无法显示,打印变量值提示"无法获取本地变量或参数的值,因为它在此指令指针中不可用,可能是因为它已经被优化掉了"。解决办法:取消"优化编码"勾选框勾选状......
  • LeeCode例题——二分查找
    1.二分查找:(面对一个升序排列的数组)classSoulution{public:intsearch(vector<int>&nums,inttarget){//函数名(数组,变量)intleft=0,right=nums.size()-......
  • 指针类型转换:reinterpre_cast
    指针类型转换:reinterpre_cast//用于指针类型之间的转换//用于整数和指针类型的转换//原理是直接从二进制位进行复制,是一种极其不安全的转换int*p=reinterpre_cas......
  • 代码随想录day 6|指针总结
    环形链表题目链接:142、环形链表Ⅱ题目描述:给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,使用整数pos来表示链表尾连......