594. Longest Harmonious Subsequence

LeetCode easy original: C# #array #csharp #easy #hash-table #leetcode #math #search
선택한 UI 언어에 맞게 문제 텍스트를 러시아어에서 번역합니다. 코드는 변경하지 않습니다.

Мы определяем гармоничный 배열 как 배열, в котором разница между его максимальным и минимальным значением составляет ровно 1.

Дан 정수 배열 nums, return длину его самой длинной гармоничной подпоследовательности среди всех возможных подпоследовательностей.

subsequence 배열а - это последовательность, которую можно получить из 배열а, удалив некоторые или никакие elementы, не изменяя порядок оставшихся elementов.

예제:

Input: nums = [1,3,2,2,5,2,3,7]

Output: 5

Explanation: The longest harmonious subsequence is [3,2,2,2,3].

C# 해법

매칭됨/원본
using System;
using System.Collections.Generic;
public class Solution {
    public int FindLHS(int[] nums) {
        var count = new Dictionary<int, int>();
        int res = 0;
        
        foreach (var num in nums) {
            if (count.ContainsKey(num)) {
                count[num]++;
            } else {
                count[num] = 1;
            }
            if (count.ContainsKey(num + 1)) {
                res = Math.Max(res, count[num] + count[num + 1]);
            }
            if (count.ContainsKey(num - 1)) {
                res = Math.Max(res, count[num] + count[num - 1]);
            }
        }
        
        return res;
    }
}

C++ 해법

자동 초안, 제출 전 검토
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public int FindLHS(vector<int>& nums) {
        var count = new unordered_map<int, int>();
        int res = 0;
        
        foreach (var num in nums) {
            if (count.count(num)) {
                count[num]++;
            } else {
                count[num] = 1;
            }
            if (count.count(num + 1)) {
                res = max(res, count[num] + count[num + 1]);
            }
            if (count.count(num - 1)) {
                res = max(res, count[num] + count[num - 1]);
            }
        }
        
        return res;
    }
}

Java 해법

매칭됨/원본
public class Solution {
    public int findLHS(int[] nums) {
        HashMap < Integer, Integer > map = new HashMap < > ();
        int res = 0;
        for (int num: nums) {
            map.put(num, map.getOrDefault(num, 0) + 1);
            if (map.containsKey(num + 1))
                res = Math.max(res, map.get(num) + map.get(num + 1));
            if (map.containsKey(num - 1))
                res = Math.max(res, map.get(num) + map.get(num - 1));
        }
        return res;
    }
}

JavaScript 해법

매칭됨/원본
var findLHS = function(nums) {
    const count = new Map();
    let res = 0;
    
    for (let num of nums) {
        count.set(num, (count.get(num) || 0) + 1);
        if (count.has(num + 1)) {
            res = Math.max(res, count.get(num) + count.get(num + 1));
        }
        if (count.has(num - 1)) {
            res = Math.max(res, count.get(num) + count.get(num - 1));
        }
    }
    
    return res;
};

Python 해법

매칭됨/원본
class Solution:
    def findLHS(self, nums: List[int]) -> int:
        count = {}
        res = 0
        
        for num in nums:
            count[num] = count.get(num, 0) + 1
            if num + 1 in count:
                res = max(res, count[num] + count[num + 1])
            if num - 1 in count:
                res = max(res, count[num] + count[num - 1])
        
        return res

Go 해법

매칭됨/원본
func findLHS(nums []int) int {
    count := make(map[int]int)
    res := 0
    
    for _, num := range nums {
        count[num]++
        if count[num+1] > 0 {
            res = max(res, count[num]+count[num+1])
        }
        if count[num-1] > 0 {
            res = max(res, count[num]+count[num-1])
        }
    }
    
    return res
}

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}

Algorithm

Пройдитесь по 배열у, создавая словарь для подсчета частоты каждого elementа.

На каждой итерации проверьте, существуют ли в словаре elementы, отличающиеся на 1 от текущего, и обновите максимальную длину гармоничной подпоследовательности.

return максимальную длину гармоничной подпоследовательности.

😎

Vacancies for this task

활성 채용 with overlapping task tags are 표시됨.

전체 채용
아직 활성 채용이 없습니다.