当前位置: 首页 > news >正文

CSP-J/S冲奖第18天:真题解析

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

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

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

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

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

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

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

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

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

正确代码参考

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    vector<int> nums(n);
    for (int i = 0; i < n; ++i) {
        cin >> nums[i];
    }
    
    // 对数组进行排序
    sort(nums.begin(), nums.end());
    
    int count = 0;
    for (int i = 0; i < n; ++i) {
        int target = nums[i];
        int left = 0, right = n - 1;
        
        while (left < right) {
            if (left == i) {
                left++;
                continue;
            }
            if (right == i) {
                right--;
                continue;
            }
            
            int sum = nums[left] + nums[right];
            if (sum == target) {
                count++;
                break;
            } else if (sum < target) {
                left++;
            } else {
                right--;
            }
        }
    }
    
    cout << count << endl;
    return 0;
}

代码解析

  1. 读取输入:使用cin读取整数nn个正整数,并存储在vector<int>中。

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

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

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

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

注意事项

  • 在双指针查找过程中,需要跳过与target相同的索引位置,以确保ab是不同的数。

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

相关文章:

  • Matlab 汽车主动悬架LQR控制器设计与仿真
  • 使用DeepSeek,优化斐波那契数函数,效果相当不错
  • 什么是有限元力学?分而治之,将复杂问题转化为可计算的数学模型
  • 设计模式-适配器模式
  • 【网页】自制流光卡片
  • 【面试手撕】非常规算法,多线程常见手撕题目
  • 【开源免费】基于SpringBoot+Vue.JS智慧生活商城系统(JAVA毕业设计)
  • vue/H5的日历组件可简单定制
  • 【spring boot 实现图片验证码 前后端】
  • STM32微控制器_03_GPIO原理与应用
  • 力扣No.376.摆动序列
  • LightGBM + TA-Lib A股实战进阶:Optuna调优与Plotly可视化详解
  • 【pptx-preview】react+pptx预览
  • 蓝牙系统的核心组成解析
  • 拥抱健康养生,开启活力生活
  • {瞎掰} 手机安装app问题:app签名,手机 or OS官方商店 其他非官方app源,安全防护 突破限制
  • gitee 远程修改完密码本地提交出错的解决方案
  • 网络性能指标
  • TK矩阵系统的软件服务
  • tuh_eeg数据集
  • 扶桑谈|从石破茂“越菲行”看日本周边外交布局战略新动向
  • 中医的千年传承:网络科学描绘其演化之路|PNAS速递
  • 港股持续拉升:恒生科技指数盘中涨幅扩大至6%,恒生指数涨3.3%
  • 行知读书会|换一个角度看见社会
  • 山西忻州市人大常委会副主任郭建平接受审查调查
  • 冯德莱恩:欧美贸易谈判前不会前往美国会见特朗普