Информация об изменениях

Сообщение Re[2]: Python и JavaScript от 07.06.2019 14:37

Изменено 07.06.2019 15:14 Lazytech

Re[2]: Python и JavaScript
Здравствуйте, shrewd, Вы писали:

S>Вообще некоторые опытные программисты говорят, что все языки одинаковые...


Я вот точно не являюсь опытным программистом, но уже заметил, как иногда невесело обходиться без мощных питоновских инструментов вроде set и dict. Хотя в JavaScript есть свой Set, а вместо dict можно использовать объекты со свойствами, возможности при этом совсем куцые...
Re[2]: Python и JavaScript
Здравствуйте, shrewd, Вы писали:

S>Вообще некоторые опытные программисты говорят, что все языки одинаковые...


Я вот точно не являюсь опытным программистом, но уже заметил, как иногда невесело обходиться без мощных питоновских инструментов вроде set и dict. Хотя в JavaScript есть свой Set, а вместо dict можно использовать объекты со свойствами, возможности при этом совсем куцые...

  P.S. Судите сами...
Вариант 1:
/**
 * @param {string} s
 * @return {number}
 */
var firstUniqChar = function(s) {
    let n = s.length;
    let charCounts = {};
    
    for (let i = 0; i < n; i++) {
        charCounts[s[i]] = (charCounts[s[i]] || 0) + 1;
    }
    
    for (let i = 0; i < n; i++) {
        if (charCounts[s[i]] == 1) {
            return i;
        }
    }

    return -1;
};

Runtime: 100 ms, faster than 61.06% of JavaScript online submissions for First Unique Character in a String.
Memory Usage: 38.3 MB, less than 56.34% of JavaScript online submissions for First Unique Character in a String.


Вариант 2:
/**
 * @param {string} s
 * @return {number}
 */
var firstUniqChar = function(s) {
    let n = s.length;
    let chars = new Array();
    let counts = new Array();
    
    for (let i = 0; i < n; i++) {
        let charIndex = chars.indexOf(s[i]);
        if (charIndex == -1) {
            chars.push(s[i]);
            counts.push(1);
        } else {
            counts[charIndex]++;
        }
    }

    let m = chars.length;
    
    for (let i = 0; i < m; i++) {
        if (counts[i] == 1) {            
            return s.indexOf(chars[i]);
        }
    }
    
    return -1;
};

Runtime: 100 ms, faster than 61.06% of JavaScript online submissions for First Unique Character in a String.
Memory Usage: 37.8 MB, less than 75.30% of JavaScript online submissions for First Unique Character in a String.


Если в JavaScript оба варианта одинаково тормозные, то в Python аналог первого варианта работал бы заметно быстрее аналога второго.