zoukankan      html  css  js  c++  java
  • 编程算法

    和为s的两个数字 代码(C)


    本文地址: http://blog.csdn.net/caroline_wendy


    题目: 输入一个递增排序的数组和一个数字s, 在数组中查找两个数, 使得它们的和正好是s.

    假设有多对数字的和等于s, 输出随意一对就可以.


    排序数组, 则能够从两端(即最大值, 最小值)開始进行查找, 当和大于时, 则降低前端, 当和小于时, 则递增尾端.

    时间复杂度O(n).


    代码:

    /*
     * main.cpp
     *
     *  Created on: 2014.6.12
     *      Author: Spike
     */
    
    /*eclipse cdt, gcc 4.8.1*/
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    bool FindNumbersWithSum(int data[], int length, int sum, int* num1, int* num2)
    {
    	bool found = false;
    	if (length<1 || num1==NULL || num2 == NULL)
    		return found;
    	int ahead = length-1;
    	int behind = 0;
    
    	while (ahead > behind) {
    		long curSum = data[ahead] + data[behind];
    		if (curSum == sum) {
    			*num1 = data[behind];
    			*num2 = data[ahead];
    			found = true;
    			break;
    		} else if (curSum < sum)
    			++behind;
    		else
    			--ahead;
    	}
    	return found;
    }
    
    int main(void)
    {
    	int data[] = {1, 2, 4, 7, 11, 15};
    	int num1, num2;
    	if (!FindNumbersWithSum(data, 6, 15,  &num1, &num2))
    		printf("Error
    ");
    	printf("num1 = %d num2 = %d
    ", num1, num2);
    }
    

    输出:

    num1 = 4 num2 = 11
    







  • 相关阅读:
    ELK--filebeat命令行参数解释
    ELK--filebeat详解
    centOS7 修改DNS
    nginx-日志统计
    ceph 安装ceph问题汇总
    正则 挖网站表格复习
    c#反射优化 表达式树
    combotree 满足条件的节点不可选中
    NHibernate获取实体配置信息(表名,列名等等)
    jqgrid 单元格放超链接文本
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6790530.html
Copyright © 2011-2022 走看看