《编程之法》:寻找和为定值的两个数

BMS | 从一串到几百串硬件架构简介 锂电池在生活中越来越多的方面扮演能源的角色,除了大家熟知的电动汽车行业,在一些消费类,工业类电子产品比如手机,电动自行车,电动工具中都有应用,追本溯源今天我们一起来学习下最基础的BMS架构。 1~4串架构 以S8241为代表的无通信/无固件/模拟器件 可实现过充保护、过放保护、过流/短路,参数由器件后缀代码决定;通信类手持设备供电系统;1~4节电池保护板架构 如图使用S-8241系列保护IC,一对充放电MOS管控制充放电的回路的切断和接通,系统供电来自于电芯电压,VM引脚用于检测过... 阅读详情

题目

输入一个整数数组和一个整数,在数组中查找一对数,满足它们的和正好是输入的那个整数。如果有多对数的和等于输入的整数,输出任意一对即可。

思路一:无序则hash

建立一张hash表,存储每个整数,然后遍历数组的前一半,在hash表中查找是否有sum-k的这个数存在。

代码

//
// Created by huxijie on 17-3-18.
// 寻找和为定值的两个数

#include <iostream>
using namespace std;

typedef struct HashNode{
    int data;
    struct HashNode *next;
}hashNode;

class HashTable{
private:
    const static int size = 25;
    hashNode *hash[size];
public:
    HashTable();
    ~HashTable();
    int getHashKey(int data);   //获取data所对应的键
    void insertHash(int data);  //将data插入到hash表中
    bool findData(int data);    //查找data是否在hash表中
    void findSumTwo(int *src,int len,int sum);  //找到所有和等于sum的数对

};

HashTable::HashTable() {
    for (int i = 0; i < size; ++i) {
        hash[i] = NULL;
    }
}

HashTable::~HashTable() {
    for (int i = 0; i < size; ++i) {
        hashNode *p = hash[i];
        while (p != NULL) {
            hashNode *tmp = p;
            p = p->next;
            delete (tmp);
        }
    }
}

//获取data所对应的键
int HashTable::getHashKey(int data) {
    return data % size;
}

//将data插入到hash表中
void HashTable::insertHash(int data) {
    int key = getHashKey(data);
    hashNode *p = hash[key];

    while (p != NULL) {
        if (p->data == data) {
            return;
        }
        p = p->next;
    }

    hashNode *newNode = new hashNode;
    newNode->data = data;
    newNode->next = hash[key];
    hash[key] = newNode;
}

//查找data是否在hash表中
bool HashTable::findData(int data) {
    int key = getHashKey(data);
    hashNode *p = hash[key];
    while (p != NULL) {
        if (p->data == data) {
            return true;
        }
        p = p->next;
    }
    return false;
}

//找到所有和等于sum的数对
void HashTable::findSumTwo(int *src,int len,int sum) {
    for (int i = 0; i < len; ++i) {
        insertHash(src[i]);
    }

    for (int j = 0; j < len / 2; ++j) {
        if (findData(sum - src[j])) {  //这里可根据是要寻找一对还是多对进行调整
            cout << src[j] << "+" << sum - src[j] << "=" << sum << endl;
        }
    }
}



int main() {
    HashTable hashTable;
    int n = 8;
    int data[n] = {1, 2, 4, 5, 7, 11, 15, 13};
    hashTable.findSumTwo(data, n, 15);

    return 0;
}

思路二:先排序再首尾指针夹逼

先将数组进行排序,然后设2个指针,分别指向首和尾,比较它们的和与要求的整数之间的大小,若小了,则首指针++; 若大了,则尾指针–;相等则是输出。

代码

//
// Created by huxijie on 17-3-18.
// 寻找和为定值的两个数

#include <iostream>
#include <algorithm>
using namespace std;

void findSumTwo(int src[],int len,int sum) {
    sort(src, src + len);
    int i = 0, j = len - 1;

    while (i < j) {
        int tmp = src[i] + src[j];
        if (tmp > sum) {
            j--;
        } else if (tmp < sum) {
            i++;
        } else {    //这里可根据是要寻找一对还是多对进行调整
            cout<<src[i]<<"+"<<src[j]<<"="<<sum<<endl;
            i++;
            j--;
        }
    }
}

int main() {
    int n = 8;

    int data[n] = {1, 2, 4, 5, 7, 11, 15, 13};
    findSumTwo(data, n, 15);
}

运行结果

2+13=15
4+11=15

Process finished with exit code 0
Postman账号 Postman账号一、为什么要注册一个Postm账号二、如何注册Postman账号三、登录账号四、切换账号五、找回账号密码 一、为什么要注册一个Postm账号 注册Postman账号是免费的。当注册并登录一个Postman账号后,用户可以获得一下权限。 (1)同步和备份历史、集合、环境和预置头。 (2)可以轻松处理来自不同机器的多个Postman实例‘ (3)创建集合链接发送给其他开发人员。 当然,不注册也可以使用Postman。 二、如何注册Postman账号 (1)下载、安装Postman应用程序。 ( 阅读详情

相关推荐

节卡Jaka Zu APP编程避坑指南:从频繁通讯错误到稳定Socket交互的调试心得

本文详细解析了节卡Jaka Zu APP编程中常见的通讯错误问题,并提供了从基础排查到高级调试的完整解决方案。通过优化网络配置、固件匹配、心跳机制和数据交互规范,开发者可实现稳定的Socket通讯,有效提升工业机器人操控的可靠性。文章特别针对v1.6.7.3版本的典型问题给出了实用调试技巧。

weixin_42639633的博客 325

寻找固定的和(C百例)

我优化的想法:将已知的两个数组进行排序,前者从小到大排序,后者从大到小排序。然后遍历第一个数组,针对每一个数字,再在第二个数组中查找,和大了向后找,dex++,找到了就count++且dex++,当a[i]+b[dex] 产生输入数据: #include #include #include using namespace std; const int maxn=1e4; #define pi

theArcticOcean 672

shopee app算法分析第一篇

shopee app算法分析第一篇分析完整算法大概要好几篇,耐心等待下.国内只会发律师函,牛逼,一个律师套话,一个律师发函,大意了(警惕卡通律师头像),希望law可以保护好你,还是干国外好.

2531

C++ Two Sum;Three Sum; FourSum--在数组中找两数/三数/四数之和为固定值

首先,本篇解决的问题采用两个指针方法的均假设数组有序的前提下,如果无序,则先通过排序算法使数组有序。 1. Two Sum 问题 可以通过map解决, vector<int> twoSum(vector<int> &nums, int target) { vector<int> v; map<int, int> hash; ...

泓源的博客 523

抖音直播小风车跳转企业微信全攻略:企业号申请+落地页配置详解

本文详细解析了抖音直播小风车跳转企业微信的全流程,包括企业号申请、小风车配置和落地页优化。通过实战指南,帮助企业高效实现私域流量沉淀,提升直播转化率,特别适合电商和营销从业者参考。

weixin_29289821的博客 614

ENVI SARscape安装全攻略:从下载到汉化一步到位(附最新试用申请链接)

本文提供ENVI SARscape从下载安装到汉化的完整指南,特别针对InSAR(合成孔径雷达干涉测量)分析环境搭建。详细介绍了系统要求、分步安装流程、汉化优化方法及硬件加速配置,并分享数据处理验证和常见问题解决方案,帮助用户高效搭建遥感数据分析平台。

rnn9storyteller的博客 1412

寻找和为定值的两个数

不忘初心,砥砺前行作者 | 陌无崖转载请联系授权题目要求输入一个整数数组和一个整数,在数组中查找一对数,满足他们的和正好是输入的那个整数,如果有多对数的和等于输入的整数,则全部输出,...

鱼尾九八 314

Ubuntu更新后VirtualBox报错rc=-1908?手把手教你修复Kernel driver not installed

本文详细解析了Ubuntu更新后VirtualBox报错rc=-1908的原因,并提供了完整的修复方案。通过重新安装VirtualBox、处理DKMS内核模块以及解决Secure Boot问题,帮助用户快速恢复虚拟机功能。特别针对Kernel driver not installed错误,给出了从诊断到修复的详细步骤。

weixin_42519781的博客 339

数组(2)——寻找和为定值的两个数

问题描述 输入一个整数数组和一个整数,在数组中查找一对数,满足他们的和正好是输入的那个整数。如果有多对数的和等于输入的整数,输出任意一对即可。例如,如果输入数组int[] a = {1,2,4,5,7,11,15}; 和整数15,那么由于 4 + 11 = 15,因此输出 4 和 11。 解法:排序夹逼法 如果数组是无序的,可以考虑把数组排成有序的,数组变成有序的之后,便可以采用很多种方法来处理这...

想当厨子的程序媛 831

平头哥面试——芯片工程师面经

有5个成递增关系的32bit地址值,彼此之间的间隔大小不确定,可以把他们当成parameter来输入模块,现有一个32bit输入数据,要求用尽量少资源去的判断这个数处于哪2个地址之间(地址区间),并且输出区间号。a)后续大概会在9月下旬谈具体的薪资,他们现在也没想好今年应届生的薪资该给多少,到时候如果可以签三方的话可能会跳过意向书环节直接发offer,谈薪资肯定是通过电话来。b. 这边的CPU是自己研制的(玄铁),成都这边主要做存储和网络,都有SOC。a. 成都这边的网络部门具体做的业务有哪些?

FPGA/MATLAB学习教程/源码/项目合作开发 2688

开源工具对比:5款主流大数据脱敏框架评测

数据脱敏(Data Masking/Anonymization),也称为数据漂白、数据去标识化,是指在不影响数据可用性的前提下,通过一定的技术手段对敏感信息进行处理,使其无法被识别或关联到具体个人或实体的过程。当应用程序向数据库写入数据(INSERT/UPDATE)时,ShardingSphere 会拦截 SQL,对配置了脱敏规则的字段,使用指定的算法进行加密/脱敏处理,然后将处理后的数据写入到。如果你的答案是“是”,那么数据脱敏,尤其是针对海量数据的。好的,各位技术同仁,数据安全领域的探索者们,大家好。

小程序开发 1184

《编程之法》:寻找和为定值的多个数

题目输入两个整数n和sum,要求从数列1,2,3,…,n中随意取出几个数,使得它们的和等于sum,请将其中所有的可能的组合列出来。思路这是个01背包问题。考虑是否取第n个数的策略,问题可以转化为一个只与前n-1个数相关的问题,也就是: (1)如果取第n个数,那么问题就转化为“取前n-1个数使得它们的和为sum-n” (2)如果不取第n个数,那么问题就转化为“取前n-1个数使得它们的和为sum”

ancientmoondjay的博客 835

【华为OD技术面试真题 - 技术面】- C++面试题(1)

2024华为OD面试手撕代码真题目录以及八股文真题目录

算法大师! 3398

【程序员编程艺术】第五章:寻找满足和为定值的两个或多个数

题目描述 输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(N)。如果有多对数字的和等于输入的数字,输出任意一对即可。 例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。

solar一抹阳光的专栏 1497

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

程序员编程艺术:第五章、寻找满足和为定值的两个或多个数

程序员编程艺术:第五章、寻找和为定值的两个或多个数       作者:July,yansha,zhouzhenren。     致谢:微软100题实现组,编程艺术室。     微博:http://weibo.com/julyweibo   。     出处:http://blog.youkuaiyun.com/v_JULY_v  。     wiki:http://tctop.wikispaces

和尚的专栏 534

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

程序员编程艺术学习笔记(五):寻找满足和为定值的两个或多个数

作者:July,yansha,zhouzhenren。     致谢:微软100题实现组,编程艺术室。     微博:http://weibo.com/julyweibo   。     出处:http://blog.youkuaiyun.com/v_JULY_v  。     wiki:http://tctop.wikispaces.com/。

知否 690

几个简单的字符串和数组计算方法

1.        给定一个递增数组和一个数字S,在数组中找到两个数使得它们之和正好是S。 思路:设定该数组的首尾的下标begin和end,当begin #include using namespace std; int arr[100]; int main() { int n =0,i; cin>>n; int begin = 0; int end =

susershine的专栏 1080
上一篇: 《编程之法》:寻找最小的k个数
下一篇: 《编程之法》:寻找和为定值的多个数
ancientmoondjay
博客等级 码龄10年 51粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值