← Static tasks

1365. How Many Numbers Are Smaller Than the Current Number

leetcode

#array#csharp#leetcode#search#sort

Task

: easy

Дан массив nums. Для каждого элемента nums[i] определите, сколько чисел в массиве меньше его. То есть, для каждого nums[i] вам нужно посчитать количество допустимых j, таких что j != i и nums[j] < nums[i].

Верните ответ в виде массива.

Пример

Input: nums = [6,5,4,8]

Output: [2,1,0,3]

C# solution

matched/original
using System;
using System.Linq;
public class Solution {
    public int[] SmallerNumbersThanCurrent(int[] nums) {
        int[] sortedNums = (int[]) nums.Clone();
        Array.Sort(sortedNums);
        return nums.Select(num => Array.IndexOf(sortedNums, num)).ToArray();
    }
}

C++ solution

auto-draft, review before submit
#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 vector<int>& SmallerNumbersThanCurrent(vector<int>& nums) {
        vector<int>& sortedNums = (int[]) nums.Clone();
        sort(sortedNums.begin(), sortedNums.end());
        return nums.Select(num => Array.IndexOf(sortedNums, num)).ToArray();
    }
}

Java solution

auto-draft, review before submit
import java.util.*;
import java.math.*;

// Auto-generated Java draft from the C# solution. Review API differences before LeetCode submit.
public class Solution {
    public int[] SmallerNumbersThanCurrent(int[] nums) {
        int[] sortedNums = (int[]) nums.Clone();
        Arrays.sort(sortedNums);
        return nums.Select(num => Array.IndexOf(sortedNums, num)).ToArray();
    }
}

Python solution

matched/original
class Solution:
    def smallerNumbersThanCurrent(self, nums: List[int]) -> List[int]:
        sorted_nums = sorted(nums)
        return [sorted_nums.index(num) for num in nums]

Go solution

matched/original
import "sort"

func smallerNumbersThanCurrent(nums []int) []int {
    sortedNums := append([]int(nil), nums...)
    sort.Ints(sortedNums)
    result := make([]int, len(nums))
    
    for i, num := range nums {
        result[i] = indexOf(sortedNums, num)
    }
    
    return result
}

func indexOf(nums []int, target int) int {
    for i, num := range nums {
        if num == target {
            return i
        }
    }
    return -1
}

Explanation

Algorithm

Создание копии и сортировка массива:

Создайте отсортированную копию массива nums, чтобы легко находить количество элементов, меньших текущего.

Поиск индекса каждого элемента:

Для каждого элемента nums[i] найдите его индекс в отсортированной копии массива. Этот индекс указывает количество элементов, меньших nums[i].

Формирование ответа:

Сформируйте массив ответов, где каждый элемент будет соответствовать количеству чисел, меньших текущего.

😎