数据结构_find_lucky_number(寻找幸运值)

问题描述

  给出两个已按升序排列的数组 a[1..n],b[1..m],如果存在 i,j,使得
a[i]+b[j]==k,我们便说已找到幸运值。请你判断能不能找到幸运值。

★数据输入

  输入第一行为正整数 n, m, k。 (1<=k<=10^9)
  第二行为 n 个正整数 a[1..n]。 (1<=ai<=10^9)
  第三行为 m 个正整数 b[1..m]。 (1<=bi<=10^9)
  80%的数据 1<=n,m<=1000.
  100%的数据 1<=n,m<=100000.

★数据输出
  如果能找到幸运值,输出 yes。否则输出 no。

输入示例 输出示例
3 3 8
1 2 3
4 6 7
yes
输入示例 输出示例
3 3 4
1 2 3
4 6 7
no

解题思路

  二分查找  找指定值

 

code

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3
 4 int pm[100002]={0};
 5 int pn[100002]={0};
 6
 7 bool BinarySearch(int *p, int l, int r, int num)
 8 {
 9     bool flag = false;
10     while(l<=r)
11     {
12         int m = (l+r)/2;
13         if(p[m]==num)
14         {
15             flag = true;
16             break;
17         }
18         else if(p[m]<num)
19             l = m+1;
20         else
21             r = m-1;
22     }
23     return flag;
24 }
25
26 int main()
27 {
28     int n,m,k,i;
29     scanf("%d %d %d",&n,&m,&k);
30 //    int *pn = (int *)malloc(sizeof(int)*n);
31 //    int *pm = (int *)malloc(sizeof(int)*m);
32     for(i=0;i<n;i++)
33         scanf("%d",pn+i);
34     for(i=0;i<m;i++)
35         scanf("%d",pm+i);
36
37     bool flag = false;
38     for(i=0;i<n;i++)
39     {
40         if(BinarySearch(pm,0,m-1,k-pn[i]))
41         {
42             flag = true;
43             break;
44         }
45     }
46
47     if(flag)
48         printf("yes\n");
49     else
50         printf("no\n");
51
52
53 //    free(pn);
54 //    free(pm);
55     return 0;
56 }
时间: 2024-08-07 10:58:41

数据结构_find_lucky_number(寻找幸运值)的相关文章

广工 数据结构 表达式类型求值(上)

一.  需求分析 一个表达式和一棵树之间存在自然的对应关系,实现以下操作: (1)以字符序列的形式输入语法正确的后缀表达式并构造表达式. (2)可实现对应原表达式的加.减.乘.除四则混合运算. (3)运算数可以是整数.实数或变量,若是变量,可对变量赋值,以求得对应原表达式的值. (4)可以求表达式的中缀和后缀序列,还可以求所建立的二叉树的深度. [测试数据] 1)分别输入0:a; -91; 2 4 +; 1.5 a uuu / *; 2  11 + 3 ^并输出. 2)每当输入一个表达式后,对其

广工 数据结构 表达式类型求值(下)

设计和调试分析 1.      在建立二叉树时,要遵循一个原则,那就是运算符做为分支结点,操作数做为叶子结点,利用栈进行操作.当遇到操作数是,无论是变量还是实数或整数,都将入栈.当遇到运算符号时,把栈顶的两个元素弹出来进行运算,然后再把运算结果放入栈中.如果你输入的是正确的后缀表达式,那么,最终要建立的那棵树就是栈中唯一的一个元素.与此同时,也可以用这个结果来作为判断用户输入的表达式是否为正确的后缀表达式,当最后的栈中出现多于一棵二叉树时,说明此表达式不是正确的后缀表达式. 2.      二叉

在dt里寻找一个值

在dt里寻找一个值 先找到行 之后在找列 int i = 0; for (; i < dt.Rows.Count; i++) { if (dt.Rows[i][0].ToString() == name) { } } if (dt.Rows[i - 1][1].ToString() == pwd) { MessageBox.Show("登录成功!"); } this.textBox1.Focus();//获取焦点

数据结构——栈——寻找下一个较大元素

题目描述 给出一个数组,向右寻找每一个元素的下一个较大的元素,没有更大的则为-1 举例 {4,6,1,3,2,5} 则求得的答案应为 {6,-1,3,5,5,-1} 题目分析 首先对于这样的题目,我们总是先想到最简单的,那么就是枚举,每次循环一个元素,不停的向右找就可以了.时间复杂度应该是n^2 但是这样肯定是不够用的. 然后我们考虑,这道题我们实际上遇到的问题是什么? 其实简单的说,这道题的意思是,在变化的数组中找到下一个较大的值. 难点在于,数组元素的变化,以及不是找最大值,而是找下一个较大

数据结构例程——表达式求值(用栈结构)

本文针对数据结构基础系列网络课程(3):栈和队列中第5课时栈的应用1-表达式求值. 例:用户输入一个包含"+"."-"."*"."/".正整数和圆括号的合法数学表达式,计算该表达式的运算结果. 解答: #include <stdio.h> #include <stdlib.h> #define MaxOp 100 #define MaxSize 100 struct //设定运算符优先级 { char

数据结构之表达式求值(C++版)

#include <windows.h>#include <iostream>#include <stdlib.h>#define MAXBUFFER 10#define MAXLISTSIZE 100 //预设的存储空间最大容量using namespace std; typedef struct{ char *base; //存储空间基址 int *elem; int top; //栈顶指针 int stacksize; //允许的最大存储空间以元素为单位}Stac

寻找hash值——把int array看成是一个整数

QUESTION: Write a class DominoChecker that has a method called addBox(int[]) that takes a box of five dominoes, described as a list of 10 integers (explained after), adds it to a collection, and returns true if a box with the same dominoes was alread

数据结构——树笔记1

树属于非线性数据结构,它是一种层次结构:如果存在前驱节点,则是唯一的,如果存在后继节点,则可以是多个.即树的元素之间是一对多的关系.树是由n个节点构成的有限集合T,如果n = 0,则是空树,如果n不等于0,则一个非空树,有且只有一个根结点root,如果n>1,则除了根结点外,其余节点又可以划分为有限集T1,T2......Tm 其中每个有限集有是一棵树.称为子树subtree. 树的存储结构    双亲表示法  孩子表示法 孩子兄弟表示法(二叉树表示法) 森林:M棵互不相交的树的集合. 二叉树:

数据结构 1、概述 特性、分类、复杂性分析

数据结构是描述非数值计算再实体中的数学模型以及在计算机中的表示方法,以及这些模型进行的操作如何在计算机中中进行操作 基本概念: 数据:所有能被输入到计算机中,且能被计算机处理的符号的集合---是计算机操作对象的总称 数据结构的逻辑组织 线性结构:线性表(表.栈.队列.串等) 非线性结构:  树(二叉树,Huffman树,二叉索引树等) 图(有向图,无向图等) 图>树>二叉树>线形图     (>包含) 数据结构的存储结构 逻辑结构到物理内存的映射 四类:顺序(存储单元的顺序地址)