CSP-J/S冲奖第18天:真题解析
开心田螺
2025-03-18 05:41:11
0

解题步骤

  1. 读取输入:首先读取整数 n,然后读取 n个正整数并存储在一个数组或容器中。

  2. 排序数组:对数组进行排序,以便后续使用双指针法高效查找。

  3. 遍历数组:对于每个数 target,检查是否存在另外两个不同的数 a和 b,使得 a + b = target。

  4. 双指针查找:对于每个 target,使用双指针法在已排序的数组中查找是否存在 a和 b满足条件。

  5. 计数结果:统计满足条件的 target的数量。

涉及的知识点
  • 数组操作:包括读取、存储和遍历数组。

  • 排序算法:对数组进行排序,常用的是 std::sort。

  • 双指针技巧:用于在有序数组中高效查找满足特定条件的元素对。

  • 条件判断与计数:通过条件判断来统计满足要求的元素数量。

正确代码参考 # include

usingnamespacestd;

intmain{

intn;

cin>> n;

vector< int> nums(n);

for( inti = 0; i < n; ++i) {

cin>> nums[i];

}

// 对数组进行排序

sort(nums.begin, nums.end);

intcount = 0;

for( inti = 0; i < n; ++i) {

inttarget = nums[i];

intleft = 0, right = n - 1;

while(left < right) {

if(left == i) {

left++;

continue;

}

if(right == i) {

right--;

continue;

}

intsum = nums[left] + nums[right];

if(sum == target) {

count++;

break;

} elseif(sum < target) {

left++;

} else{

right--;

}

}

}

cout<< count << endl;

return0;

}

代码解析

  1. 读取输入:使用 cin读取整数 n和 n个正整数,并存储在 vector中。

  2. 排序数组:使用 std::sort对数组进行升序排序。

  3. 遍历数组:使用 for循环遍历每个数 target。

  4. 双指针查找:使用两个指针 left和 right,分别从数组两端向中间移动,查找是否存在 a和 b满足 a + b = target。

  5. 条件判断与计数:如果找到满足条件的 a和 b,则计数器 count加1,并跳出当前循环。

注意事项
  • 在双指针查找过程中,需要跳过与 target相同的索引位置,以确保 a和 b是不同的数。

  • 使用 break语句跳出内层循环,避免重复计算。

相关内容

热门资讯

浙江成人高考社会工作专业如何选... 很多同学报成考社工专业,都怕“没用、不好就业”,今天专门整理专业发展路径,适合想求稳、考编、进社区的...
上海多家老年大学首设暑期班,让... 央广网上海8月3日消息(记者沈梅)这个夏天,上海老年教育迎来了一股“清凉”新风。当暑期不再是传统意义...
友好小关|谁说暑假只能“家里蹲... 盛夏启新程 实践育少年 为丰富辖区青少年暑期生活 引导广大青少年在亲身实践中 增长见识、磨砺品格、厚...
蒸汽教育案例只看Offer够吗... 一名留学生拿到Offer后,以为最困难的阶段已经结束。 真正入职后,他才发现,自己虽然能够回答面试中...
【新晚夜读】一个孩子最大的幸福... 被允许,肆意遐想 每个孩子天生都有丰富的想象力。沉浸在自己天真的幻想里,是童年最美好的乐趣。但在生活...
重奖19万,汕尾一社区李同学6... 以前以为建功立业、加官进爵才能族谱单开,现在才发现靠学习也能族谱单开了。最近潮汕很多地区都在重奖族内...
高考罕见现象:学霸集体“弃98... 每年高考志愿填报,高分考生的选择都能折射出当下的升学和就业风向。往年稳居顶端的985名校,今年却遭遇...
边玩游戏边考上北大?珠海一中学... 采写:南方+记者 冉小平 来源:南方Plus客户端 近日,珠海市第一中学2026届“物化生组合”考生...
闪送师傅女儿考上北大,电瓶车挂... 近日,广西南宁一位闪送员父亲,因女儿成功考上北京大学,特意在电动车上挂满饮料,免费请路人喝水,满脸都...
闲聊公职面试品牌公司,公务员面... 在公职考试赛道中,面试环节往往是决定考生能否上岸的关键一步,不少备考者都会选择专业的面试培训机构助力...