美文网首页笔试&&面试经验算法编程
多语言解编程题之最大子串和

多语言解编程题之最大子串和

作者: 剪影Boy | 来源:发表于2017-08-28 15:37 被阅读4次

    给予一个整数字符串,找出所有连续子串和的最大值。
    样例输入:-23 17 -7 11 -2 1 -34
    样例输出:21

    JavaScript(Node)实现

    const readline = require('readline');
    const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout
    });
    rl.on('line', function(line) {
        let str = line;
        let res = findMaxSum(str);
        console.log(res);
    });
    
    function findMaxSum(str) {
        let arr = str.split(' ').map(val => +val);
        let len = arr.length;
        let sum = Number.MIN_SAFE_INTEGER;
        let temp;
        for (let i = 0; i < len; i++) {
            temp = 0;
            for (let j = i; j < len; j++) {
                temp += arr[j];
                if (temp > sum) {
                    sum = temp;
                }
            }
        }
        return sum;
    }
    

    PHP实现

    <?php
        $handle = fopen("php://stdin", "r");
        $str = fgets($handle);
        while ($str !== "") {
            echo findMaxSum($str) . "\n";
            $str = fgets($handle);
        }
        fclose($handle);
    
        function findMaxSum($str) {
            $arr = array_map("intval", explode(" ", $str));
            $len = count($arr);
            $sum = PHP_INT_MIN;
            for ($i = 0; $i < $len; $i++) {
                $temp = 0;
                for ($j = $i; $j < $len; $j++) {
                    $temp += $arr[$j];
                    if ($temp > $sum) {
                        $sum = $temp;
                    }
                }
            }
            return $sum;
        }
    

    C++实现

    #include <iostream>
    #include <string>
    #include <sstream>
    #include <vector>
    #include <limits>
    using namespace std;
    
    int findMaxSum(string s) {
        stringstream iss(s);
        int number;
        vector<int> v;
        while(iss >> number) {
            v.push_back(number);
        }
        int n = v.size();
        int sum = numeric_limits<int>::min();
        int temp;
        for (int i = 0; i < n; i++) {
            temp = 0;
            for (int j = i; j < n; j++) {
                temp += v[j];
                if (temp > sum) {
                    sum = temp;
                }
            }
        }
        return sum;
    }
    
    int main() {
        string s;
        while (getline(cin, s)) {
            cout << findMaxSum(s) << endl;
        }
        return 0;
    }
    

    题目比较简单,主要是熟悉一下各种语言的写法。

    以上。

    个人技术博客 biebu.xin,原文链接——多语言解编程题之最大子串和

    相关文章

      网友评论

        本文标题:多语言解编程题之最大子串和

        本文链接:https://www.haomeiwen.com/subject/acrgdxtx.html