zoukankan      html  css  js  c++  java
  • [coding horror] 1

    sum 2

    描述

    输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。

    对应每个测试案例,输出两个数,小的先输出。

    coding horror

    
    class Solution {
    public:
        vector<int> FindNumbersWithSum(vector<int> array,int sum) {
         	vector<int> ret;
    
        	if(array.size()==0){
        		return ret;
        	};
    
         	vector<int> first_nums;
         	vector<int> second_nums;
    
         	int first_index = 0;
         	int second_index = array.size() - 1;
    
         	while(first_index < second_index){ // index越界
         		int first = array[first_index];
         		int second = array[second_index];
    
         		if( first + second == sum) {
         			first_nums.push_back(first);
         			second_nums.push_back(second);
         			first_index++;
         			second_index--;
         		}
         		else if(first + second < sum){
         			first_index++;
         		}
         		else{ // first + second > sum
         			second_index--;
         		}
         	}
    
         	int min_index = 0;
         	int min; // 未初始化最小值
         	for(int i =0 ;i < first_nums.size(); i++){
         		if(first_nums[i]*second_nums[i] < min){
         			min_index = i;
         			min = first_nums[i]*second_nums[i];
         		}
         	}
    
         	ret.push_back(first_nums[min_index]);
         	ret.push_back(second_nums[min_index]);
    
         	return ret;
        }
    };
    
    
    

    maybe ok

    #include "stdio.h"
    #include <vector>
    
    using std::vector;
    
    class Solution {
    public:
        vector<int> FindNumbersWithSum(vector<int> array,int sum) {
         	vector<int> ret;
    
        	if(array.size()==0){
        		return ret;
        	};
    
         	vector<int> first_nums;
         	vector<int> second_nums;
    
         	int first_index = 0;
         	int second_index = array.size() - 1;
    
         	while((first_index < second_index)&&(first_index <array.size()-1)&&(second_index>0)){// 注意索引不要越界。
         		int first = array[first_index];
         		int second = array[second_index];
    
         		if( first + second == sum) {
         			first_nums.push_back(first);
         			second_nums.push_back(second);
         			first_index++;
         			second_index--;
         		}
         		else if(first + second < sum){
         			first_index++;
         		}
         		else{ // first + second > sum
         			second_index--;
         		}
         	}
    
            if(first_nums.size()>0){
                int min_index = 0;
                int min = first_nums[0]*second_nums[0];// 1.如果vector为空可能造成越界,需先判断vector是否为空。2. 用于比较的最小值要先赋初始值。
    
                for(int i =0 ;i < first_nums.size(); i++){
                    if(first_nums[i]*second_nums[i] < min){
                        min_index = i;
                        min = first_nums[i]*second_nums[i];
                    }
                }
    
                ret.push_back(first_nums[min_index]);
                ret.push_back(second_nums[min_index]);
            }
    
         	return ret;
        }
    };
    
    int main(int argc, char const *argv[])
    {
        /* code */
        int nums[] = {1,1,1,3,1};
        std::vector<int> vnums(nums,nums+5);
        Solution sol;
        
        std::vector<int> vret;
        vret = sol.FindNumbersWithSum(vnums,5);
    
        for(std::vector<int>::iterator it= vret.begin(); it != vret.end();it++){
            printf("%d
    ", *it);
        }    
        return 0;
    
    }
    
  • 相关阅读:
    Test Double
    测试金字塔
    windows 10安装 db2
    漫谈系列
    SOA 和 微服务的几篇文章
    JavaScript JQuery
    【原创】单测代码生成工具Evosuite试用
    [转载]Linux进程调度原理
    [转载]Java 应用性能调优实践
    [转载]Java进程物理内存远大于Xmx的问题分析
  • 原文地址:https://www.cnblogs.com/helo-blog/p/6080306.html
Copyright © 2011-2022 走看看