首页 > 其他分享 >和为给定数(二分法)

和为给定数(二分法)

时间:2024-04-06 13:11:51浏览次数:28  
标签:输出 优先级 运算 int 二分法 wrong num 定数

题目:


 

描述
给出若干个整数,询问其中是否有一对数的和等于给定的数。

输入
共三行:

第一行是整数n(0 < n <= 100,000),表示有n个整数。

第二行是n个整数。整数的范围是在0到10^8之间。

第三行是一个整数m(0 <= m <= 2^30),表示需要得到的和。

输出
若存在和为m的数对,输出两个整数,小的在前,大的在后,中间用单个空格隔开。若有多个数对满足条件,选择数对中较小的数更小的。若找不到符合要求的数对,输出一行No。

样例输入
4
2 5 1 4
6
样例输出
1 5
解题思路
定义一个标志,默认值为0

把数组按从小到大排序

写一个for循环对数组的每一项进行遍历,在for循环中利用二分查找查找在剩余的每一项中是否有和为给定的数,如果有给标志赋值1,并跳出循环

for循环结束后如果标志值仍然为0,则输出No

 

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4  
 5 int f = 0;    //标志数 
 6  
 7 int main()
 8 {
 9     int n,m;
10     cin >> n;
11     int num[n];
12     for(int i = 0; i < n; i++){
13         cin >> num[i];
14     }
15     cin >> m;
16     
17     sort(num, num + n);    //对数组进行升序排序 
18     
19     for(int i = 0; i < n; i++){
20         int left = i + 1, right = n;
21         while(left < right){
22             int mid = (left + right) / 2;
23             //找到给定值输出结果并结束循环 
24             if(num[mid] + num[i] == m){
25                 f = 1;
26                 cout << num[i] << " " << num[mid] << endl;
27                 break;
28             }
29             if(num[i] + num[mid] < m){
30                 left = mid + 1;
31             }
32             else{
33                 right = mid - 1;
34             }
35         }
36         if(f == 1) break;    //如果标志为1代表已经输出了需要的结果,无需后续遍历 
37     }
38     
39     //未找到给定数 
40     if(f == 0){
41         cout << "No" << endl;
42     }
43     
44     return 0;
45 }

 


————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/m0_51684823/article/details/129189796

-------------------------------------------------


 

中间的坑

 

用血与泪的经历告诉你们这道题的思路orz

1、开始 我是这样想的 从那些数中 找出一个比给定数小一位的数,然后找m-比他小一位的数是否在序列中,但是还要判断比他小一位的数

是否在序列中等诸多问题(orz),然后就wrong了

后来 题解 的方法是将序列按升序排序,从第一位开始,看看m-第一位是否在序列中。。正好与我相反(orz)

然后又wrong了QAQ

2、有个坑 如果 2个数 1 3 给定数为2,那么就会输出1 1,这是不对的,1重复使用了。所以还要判断重复使用。在二分查找的时候,函数的返回值是他的位置

并且找到的这个位置不能等于他正在枚举的数的位置,这样就避免了、、、、

但是 又 wrong了

3、原来 是 移位运算的顺序0-0

l+(r-l)/2 这是我的本意 然后我用了移位运算 l+(r-l)>>1,这样是不对的 

因为 (下面贴一大段qwq)

优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。 相同优先级中,按结合顺序计算。大多数运算是从左至右计算,只有三个优先级是从右至左结合的,它们是单目运算符条件运算符赋值运算符。 基本的优先级需要记住: 指针最优,单目运算优于双目运算。如正负号。 先乘除(模),后加减。 先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7等价于 (1 << (3 + 2))&7. 逻辑运算最后计算。

果然 我还是又wrong了。。。

4、原来我开始定义的long long 格式化却用的%d。。。。

 

标签:输出,优先级,运算,int,二分法,wrong,num,定数
From: https://www.cnblogs.com/lmarsy/p/18117345

相关文章

  • ·跟着代码随想录刷力扣· ·数组部分· 2. 二分法
    leetcode题目:704二分法一、回顾顺序搜索(一)无序列表的顺序搜索,时间复杂度O(n)defsearch(self,nums:List[int],target:int)->int:pos=0whilepos<len(nums):ifnums[pos]==target:returnpos......
  • 二分法
    概述二分查找详解.mdSTLC++二分查找库二分查找库闭区间、左闭右开区间和开区间视频讲解二分法classSolution{//lower_bound返回最小的满足nums[i]>=target的i//如果数组为空,或者所有数都<target,则返回nums.size()//要求nums是非递减的,即......
  • Sql Server设置用户只能查看并访问特定数据库
    1.新建登录用户以管理员身份登陆数据库(权限最高的身份如sa),点击安全性->登录名,右键新建登录名,输入登录名和密码,取消强制实施密码策略。 2.将服务器角色设置为public 3.将public服务器角色的属性->取消查看所有数据库的权限点击安全性->服务器角色->public,右键属性。点击服务......
  • 记一次WPF的DataGrid绑定数据
    之前一直在用winform,但是感觉界面不好看,然后就自己在网上学习WPF。一开始看到DataGrid的时候,还以为它是DataGridView,然后用winform的方法绑定数据发现不行,在不断的查找之后,终于学会了怎么简单的绑定数据。工具:VStudio2022框架:.netframework4.8新建一个WPF窗体,再把DataGrid拖......
  • 代码随想录第一天-双指针+二分法
    参考资源:https://programmercarl.com/、ChatGPT3.5语言:Java二分法二分法,又称为二分查找或折半查找,是一种在有序数组中查找目标值的算法。它的基本思想是将目标值与数组中间的元素进行比较,若目标值等于中间元素,则查找成功;若目标值小于中间元素,则在数组的左半部分继续查......
  • 3月22日二分法查找
    二分查找:二分查找也叫折半查找,二分查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。普通查找的时间复杂度为O(n),二分查找的时间复杂度仅需要O(log2^n)查找的实现原理:先定左右边界,之后比较待查找元素与中间元素谁大谁小,如果中间值大于目标值,那么右边界等于中......
  • [数组练习题]二分法查找操作实例:使用二分法查找有序数组中元素。 找到返回索引,不存在
    文章目录题干一、题目分析1.定义数组,用于后续在数组中查找元素2.对数组进行排序3.定义方法4.调用方法,打印输出二、代码1.代码块2.一图流总结题干提示:这段是题干,仔细阅读仔细分析:二分法查找操作:使用二分法查找有序数组中元素。找到返回索引,不存在输出-1。......
  • Python 递归函数实现二分法,带思路解释
            二分法可以大大提升对有序数列的查找,传统的迭代查找会挨个比较数列中的值,如果数列较为庞大会影响查询效率。二分法每次取数列的中间数与待查找数字比较大小,以升序排列为例子 首先要考虑数列长度的奇偶性。        奇数取中间位置的数字,如果比待查找......
  • 【二分法】分巧克力问题/python
    1.看出是用二分法:最大值最小化,最小值最大化,满足条件的最值,用二分法做。2.确定low,high,确定check的条件3.注意: 是当low<high的时候进行循环,当相等或大于的时候输出,while的条件不能写错。 本题是在区间里面找满足条件的最大值,所以,在算mid的时候面对取整的问题让它向大......
  • 蓝河 BlueOS Studio——input绑定数据
    input绑定数据遇到的问题 虽然是一个很简单的功能,但是不能用本地测试,这时候就会出现问题,我在这个问题上卡了一阵子,很是不舒服,写出来,让大家引以为戒,节约大家的时间。<inputtype="text"model:value="{{info}}"placeholder="请输入参数"/><textclass="title">{{info}}......