【Leetcode -412.Fizz Buzz -414.第三大的数】

简介: 【Leetcode -412.Fizz Buzz -414.第三大的数】

Leetcode -412.Fizz Buzz

题目:给你一个整数 n ,找出从 1 到 n 各个整数的 Fizz Buzz 表示,并用字符串数组 answer(下标从 1 开始)返回结果,其中:

answer[i] == “FizzBuzz” 如果 i 同时是 3 和 5 的倍数。

answer[i] == “Fizz” 如果 i 是 3 的倍数。

answer[i] == “Buzz” 如果 i 是 5 的倍数。

answer[i] == i (以字符串形式)如果上述条件全不满足。

示例 1:

输入:n = 3

输出:[“1”, “2”, “Fizz”]

示例 2:

输入:n = 5

输出:[“1”, “2”, “Fizz”, “4”, “Buzz”]

示例 3:

输入:n = 15

输出:[“1”, “2”, “Fizz”, “4”, “Buzz”, “Fizz”, “7”, “8”, “Fizz”, “Buzz”, “11”, “Fizz”, “13”, “14”, “FizzBuzz”]

我们的思路是,先生成1-n的数字,再判断它们是否满足FizzBuzz或Fizz或Buzz的条件;要注意返回的空间需要我们自己开辟,我们需要开辟一个二级指针返回,对二级指针的下标访问即解引用的一级指针,用来分配单个字符串的空间;

char** fizzBuzz(int n, int* returnSize)
    {
        //返回的数组的指针
        char** ret = (char**)malloc(sizeof(char*) * n);
        //生成1-n的数
        for (int i = 1; i <= n; i++)
        {
            //分配单个字符串的空间,因为最长的字符串为FizzBuzz,加上'\0'就为9个字符,所以开9个空间
            ret[i - 1] = (char*)malloc(sizeof(char) * 9);
            //满足同时能被3和5整除,就将FizzBuzz拷贝到ret[i-1]中
            if (i % 3 == 0 && i % 5 == 0)
            {
                strcpy(ret[i - 1], "FizzBuzz");
            }
            //只满足能被3整除,就将Fizz拷贝到ret[i-1]中
            else if (i % 3 == 0)
            {
                strcpy(ret[i - 1], "Fizz");
            }
            //只满足能被5整除,就将Buzz拷贝到ret[i-1]中
            else if (i % 5 == 0)
            {
                strcpy(ret[i - 1], "Buzz");
            }
            //都不能被整数,就将数字转成字符串,使用sprintf函数
            else
            {
                sprintf(ret[i - 1], "%d", i);
            }
        }
        //返回的长度
        *returnSize = n;
        return ret;
    }

Leetcode - 414.第三大的数

题目:给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。

示例 1:

输入:[3, 2, 1]

输出:1

解释:第三大的数是 1 。

示例 2:

输入:[1, 2]

输出:2

解释:第三大的数不存在, 所以返回最大的数 2 。

示例 3:

输入:[2, 2, 3, 1]

输出:1

解释:注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。

此例中存在两个值为 2 的数,它们都排第二。在所有不同数字中排第三大的数为 1 。

我们的思路是对数组先进行降序排序,用flag记录当前的元素是第几大的数,flag开始默认为1,然后每次比较相邻的两项,当相邻的两项不相等时,flag++,当flag等于3的时候返回这个数;若遍历完数组还没有返回,就返回最大的数;

int compare(const void* p1, const void* p2)
    {
        //return *(int*)p1 > *(int*)p2; 是增序排列
        //return *(int*)p1 < *(int*)p2; 是降序排列
        return *(int*)p1 < *(int*)p2;
    }
    int thirdMax(int* nums, int numsSize)
    {
        //使用qsort进行降序排序
        qsort(nums, numsSize, sizeof(nums[0]), compare);
        //flag记录当前是第几大的数
        int flag = 1;
        //遍历数组,从下标为1开始,每次与上一项比较是否相等,当不相等的时候flag++
        //并且当flag等于3的时候,即已经找到第三大的数,就返回这个数
        for (int i = 1; i < numsSize; i++)
        {
            if (nums[i] != nums[i - 1] && ++flag == 3)
            {
                return nums[i];
            }
        }
        //遍历完数组还没有返回,就返回最大的数;因为是降序,返回第一项即可
        return nums[0];
    }
目录
相关文章
LeetCode 412. Fizz Buzz
写一个程序,输出从 1 到 n 数字的字符串表示。
104 0
LeetCode 412. Fizz Buzz
LeetCode 412. Fizz Buzz
|
算法 Java C#
【算法千题案例】每日LeetCode打卡——74.Fizz Buzz
📢前言 🌲原题样例:Fizz Buzz 🌻C#方法:模拟 + 字符串拼接 🌻Java 方法:模拟 + 字符串拼接 💬总结
【算法千题案例】每日LeetCode打卡——74.Fizz Buzz
|
算法 Python
<LeetCode天梯>Day043 Fizz Buzz(按部就班) | 初级算法 | Python
<LeetCode天梯>Day043 Fizz Buzz(按部就班) | 初级算法 | Python
<LeetCode天梯>Day043 Fizz Buzz(按部就班) | 初级算法 | Python
|
算法 文件存储
[leetcode/lintcode 题解] 算法面试真题详解:Fizz Buzz 问题
[leetcode/lintcode 题解] 算法面试真题详解:Fizz Buzz 问题
[leetcode/lintcode 题解] 算法面试真题详解:Fizz Buzz 问题
[LeetCode]--412. Fizz Buzz
Write a program that outputs the string representation of numbers from 1 to n. But for multiples of three it should output “Fizz” instead of the number and for the multiples of five output
1016 0
|
Java
LeetCode 412 Fizz Buzz
版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/52842179 翻译 写一个程序,其输出表示数字1到n。
748 0
|
1月前
|
机器学习/深度学习 算法
力扣刷题日常(一)
力扣刷题日常(一)
20 2