• 剑指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;
        }
    };
  • 相关阅读:
    Java线程同步synchronized的理解
    MySQL基础操作(二)
    MySQL基础操作(一)
    MySQL备份--xtrabackup与mysqldump工具使用
    MySQL主从复制以及在本地环境搭建
    生活在长大——第一次冲刺小任务
    现代软件工程之敏捷开发
    入门github
    我的编程人生
    Java线程
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/6854398.html
Copyright © 2020-2023  润新知