zoukankan      html  css  js  c++  java
  • 剑指offer 和为s的两个数字的调试

    这是整个调试, for (int i:s) cout<<i<<endl;这句话是c++11特性下的一种遍历方式

    在编译的时候需要加-std=c++11,即g++ 41.cpp -std=c++11

    如果不加就会报错,因为这是c++11的特性

    #include <iostream>
    #include <vector>
    using namespace std;
    
    class Solution {
    public:
        vector<int> FindNumbersWithSum(vector<int> array,int sum) {
            vector<int> result;
            if(array.size() <= 0)
                return result;
            //cout<<array.size()<<endl;
            vector<int>::iterator first = array.begin();
            vector<int>::iterator last = array.end() - 1;
            cout<<*last<<endl;
            while(first < last){
                int number = *first + *last;
                if(number == sum){
                    result.push_back(*first);
                    result.push_back(*last);
                    first++;
                    last--;
                    cout<<array.size()<<endl;
                }
                else if(number < sum){
                    first++;
                    cout<<number<<endl;
                    cout<<'1'<<endl;
                }
                else{
                    last--;
                    cout<<'2'<<endl;
                }
            }
            if(result.size() > 2){
                cout<<'2'<<endl;
                return Findsmall(result);
                // return result;
            }
            else{
                cout<<result.size()<<endl;
                return result;
            }
        }
        vector<int> Findsmall(vector<int> array){
            int length = array.size();
            int pair = length/2;
            vector<int> result(2,0);
            int product = 999999;
            for(int i = 0;i < pair;i++){
                int num = array[2*i]*array[2*i+1];
                if(num < product){
                    result[0] = array[2*i];
                    result[1] = array[2*i+1];
                    product = num;
                }
            }
            return result;
        }
    };
    
    
    int main(){
        Solution a;
        int b[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
        vector<int> base(b,b+20);
        vector<int> s = a.FindNumbersWithSum(base,21);
        for (int i:s) cout<<i<<endl;
        return 0;
    }

    这个题目还可以直接把第一个求出来作为结果,但是这种情况有个bug,如果数据时由负变到正的,就不成立

    class Solution {
    public:
        vector<int> FindNumbersWithSum(vector<int> array,int sum) {
            vector<int> result;
            int length = array.size();
            if(length <= 0)
                return result;
            int start = 0;
            int end = length - 1;
            int num = array[start] + array[end];
            while(start <= end){
                if(num == sum){
                    result.push_back(array[start]);
                    result.push_back(array[end]);
                    break;
                }
                else if(num < sum){
                    start++;
                    num = array[start] + array[end];
                }
                else{
                    end--;
                    num = array[start] + array[end];
                }
            }
            return result;
        }
    };
  • 相关阅读:
    又发现新的QQ系统消息相关dll文件
    修改QQ版本号,解决QQ版本过低
    学DIV+CSS技术,如何入门?
    删除MSN广告及屏蔽MSN网页广告的方法
    制作网页需要掌握的几个基本技能
    陈晓薇的灿烂人生:比美丽更动人
    屏蔽QQ系统广播消息方法
    HTML结构化CSS网页布局入门指南
    Photoshop常用快捷键(逐步熟悉)
    如何去除视频上的水印?
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/6854398.html
Copyright © 2011-2022 走看看