Eat Study Love

먹고 공부하고 사랑하라

Coding_Practice

Sort Array by Increasing Frequency[E,Array,Hash Table,Sorting]

eatplaylove 2024. 9. 4. 15:28

Given an array of integers nums, sort the array in increasing order based on the frequency of the values. If multiple values have the same frequency, sort them in decreasing order.

Return the sorted array.

 

Example 1:

Input: nums = [1,1,2,2,2,3]
Output: [3,1,1,2,2,2]
Explanation: '3' has a frequency of 1, '1' has a frequency of 2, and '2' has a frequency of 3.

Example 2:

Input: nums = [2,3,1,3,2]
Output: [1,3,3,2,2]
Explanation: '2' and '3' both have a frequency of 2, so they are sorted in decreasing order.

Example 3:

Input: nums = [-1,1,-6,4,5,-6,1,4,1]
Output: [5,-1,4,4,-6,-6,1,1,1]

 

Constraints:

  • 1 <= nums.length <= 100
  • -100 <= nums[i] <= 100

1. Python

 

만만하게 봤는데, lambda 함수를 정의해야 한다. 꽤나 귀찮다.

 

sorted(nums,key=lambda x : (dict[x](오름차순) , -x(내림차순)) 부분에 집

class Solution:
    def frequencySort(self, nums: List[int]) -> List[int]:
        # 숫자의 빈도를 세는 딕셔너리
        freq_dict = {}
        for num in nums:
            if num not in freq_dict:
                freq_dict[num] = 1
            else:
                freq_dict[num] += 1
        
        # nums 리스트를 빈도와 숫자 크기 순으로 정렬
        # 첫 번째 기준: 빈도 오름차순
        # 두 번째 기준: 빈도가 같으면 숫자를 내림차순으로 정렬
        return sorted(nums, key=lambda x: (freq_dict[x], -x))

 

2. C++

 

C++에서 lambda 함수는 [&] int a, int b 이런 식으로 쓴다.

#C++
class Solution {
public:
    vector<int> frequencySort(vector<int>& nums) {
        map<int,int> freq;
        for(int num : nums){
            freq[num]++;
        }
        sort(nums.begin(),nums.end(),[&](int a, int b){
            if(freq[a] != freq[b]){
                return freq[a] < freq[b];
            }
            else return a>b;
        });
        return nums;
    }
};