414 Third Maximum Number

题目来源【Leetcode

Given a non-empty array of integers, return the third maximum number in this array. If it does not exist, return the maximum number. The time complexity must be in O(n).

Example 1:
Input: [3, 2, 1]
Output: 1
Explanation: The third maximum is 1.

Example 2:
Input: [1, 2]
Output: 2
Explanation: The third maximum does not exist, so the maximum (2) is returned instead.

Example 3:
Input: [2, 2, 3, 1]
Output: 1
Explanation: Note that the third maximum here means the third maximum distinct number.
Both numbers with value 2 are both considered as second maximum.

这道题比较简单,就是求第三大的数,考虑好几种特殊情况就没啥问题了

class Solution {
public:
    int thirdMax(vector<int>& nums) {
        int s = nums.size();
        if(s == 0) return 0;
        sort(nums.begin(),nums.end());
        nums.erase(unique(nums.begin(),nums.end()),nums.end());
        if(nums.size() == 1) return nums[0];
        else if(nums.size() == 2)  return nums[1];
        else if(nums.size() == 3)  return nums[0];
        else return nums[nums.size()-3];
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Here's an implementation of the program in C: ```c #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <math.h> // Global variables for storing statistical values double average = 0.0; int minimum = 0; int maximum = 0; double median = 0.0; double std_dev = 0.0; // Struct for passing arguments to worker threads typedef struct { int* numbers; int count; } thread_args; // Worker thread for calculating average void* calculate_average(void* args) { thread_args* targs = (thread_args*) args; int* numbers = targs->numbers; int count = targs->count; double sum = 0.0; for (int i = 0; i < count; i++) { sum += numbers[i]; } average = sum / count; pthread_exit(NULL); } // Worker thread for calculating minimum void* calculate_minimum(void* args) { thread_args* targs = (thread_args*) args; int* numbers = targs->numbers; int count = targs->count; minimum = numbers[0]; for (int i = 1; i < count; i++) { if (numbers[i] < minimum) { minimum = numbers[i]; } } pthread_exit(NULL); } // Worker thread for calculating maximum void* calculate_maximum(void* args) { thread_args* targs = (thread_args*) args; int* numbers = targs->numbers; int count = targs->count; maximum = numbers[0]; for (int i = 1; i < count; i++) { if (numbers[i] > maximum) { maximum = numbers[i]; } } pthread_exit(NULL); } // Worker thread for calculating median void* calculate_median(void* args) { thread_args* targs = (thread_args*) args; int* numbers = targs->numbers; int count = targs->count; int* sorted_numbers = malloc(count * sizeof(int)); for (int i = 0; i < count; i++) { sorted_numbers[i] = numbers[i]; } for (int i = 0; i < count - 1; i++) { for (int j = i + 1; j < count; j++) { if (sorted_numbers[i] > sorted_numbers[j]) { int temp = sorted_numbers[i]; sorted_numbers[i] = sorted_numbers[j]; sorted_numbers[j] = temp; } } } if (count % 2 == 0) { median = (sorted_numbers[count / 2 - 1] + sorted_numbers[count / 2]) / 2.0; } else { median = sorted_numbers[count / 2]; } free(sorted_numbers); pthread_exit(NULL); } // Worker thread for calculating standard deviation void* calculate_std_dev(void* args) { thread_args* targs = (thread_args*) args; int* numbers = targs->numbers; int count = targs->count; double sum = 0.0; for (int i = 0; i < count; i++) { sum += pow(numbers[i] - average, 2); } std_dev = sqrt(sum / count); pthread_exit(NULL); } int main(int argc, char* argv[]) { // Parse command line arguments if (argc < 2) { printf("Usage: %s <number1> <number2> ... <numberN>\n", argv[0]); return 1; } int count = argc - 1; int* numbers = malloc(count * sizeof(int)); for (int i = 0; i < count; i++) { numbers[i] = atoi(argv[i + 1]); } // Create worker threads pthread_t threads[5]; thread_args targs = {numbers, count}; pthread_create(&threads[0], NULL, calculate_average, &targs); pthread_create(&threads[1], NULL, calculate_minimum, &targs); pthread_create(&threads[2], NULL, calculate_maximum, &targs); pthread_create(&threads[3], NULL, calculate_median, &targs); pthread_create(&threads[4], NULL, calculate_std_dev, &targs); // Wait for worker threads to complete for (int i = 0; i < 5; i++) { pthread_join(threads[i], NULL); } // Print results printf("The average value is %.2f\n", average); printf("The minimum value is %d\n", minimum); printf("The maximum value is %d\n", maximum); printf("The median value is %.2f\n", median); printf("The standard deviation is %.2f\n", std_dev); // Clean up free(numbers); return 0; } ``` The program takes a list of numbers as command line arguments, creates five worker threads to calculate statistical values, and then outputs the results once the worker threads have completed their calculations. Note that the median calculation uses a simple sorting algorithm to sort the list of numbers first. This may not be efficient for very large lists of numbers, but it works well enough for small lists. Also note that the standard deviation calculation uses the formula for sample standard deviation, which divides by N-1 instead of N to correct for bias.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值