网易首页 > 网易号 > 正文 申请入驻

小米今年招了4000名应届生,用10年的时间让其佼佼者成为技术专家或总经理。

0
分享至

专栏:50多种数据结构彻底征服

专栏:50多种经典图论算法全部掌握

本周三小米举办2024届小米应届生迎新典礼,小米CEO雷军出席典礼并发表演讲。据雷军介绍,2024年小米一共招募了4000名应届生,明年至少还会招募4000-5000名。

小米“应届生计划”的目标就是10年时间让其中的佼佼者成为技术专家,或者成为总经理。

--------------下面是今天的算法题--------------

来看下今天的算法题,这题是LeetCode的第556题:下一个更大元素 III。

问题描述

来源:LeetCode第556题

难度:中等

给你一个正整数 n ,请你找出符合条件的最小整数,其由重新排列 n 中存在的每位数字组成,并且其值大于 n 。如果不存在这样的正整数,则返回 -1 。

注意 ,返回的整数应当是一个 32 位整数 ,如果存在满足题意的答案,但不是 32 位整数 ,同样返回 -1 。

示例1:


输入:n = 12 输出:21

示例2:


输入:n = 21 输出:-1

  • 1 <= n <= 2^31 - 1

问题分析

这题和前面讲的 基本完全一样,都是求下一个更大的值,只不过他们给的参数不一样,前面那道题直接给了一个数组,而这题是给了一个数字。但不影响,我们可以先把数字中的每一位都提取出来,构成一个数组,那么这题就和前面那道题完全一样了。具体实现原理可以参考前面的,这里就不在重复介绍。

JAVA:

public int nextGreaterElement(int n) {
    String str = String.valueOf(n);
    int[] nums = new int[str.length()];
    // 把数字 n 的每一位转成数组
    for (int i = 0; i < str.length(); i++)
        nums[i] = str.charAt(i) - '0';
    // 如果不存在下一个,返回 -1 。
    if (!nextPermutation(nums))
        return -1;
    // 把数组转化为数字
    long ans = 0;
    for (int num : nums) {
        ans = ans * 10 + num;
        if (ans > Integer.MAX_VALUE)
            return -1;
    }
    return (int) ans;
}

public boolean nextPermutation(int[] nums) {
    int left = nums.length - 2;
    // 两两比较,从后面往前找第一个降序的
    while (left >= 0 && nums[left] >= nums[left + 1])
        left--;
    // 如果都是逆序的,也就是没有下一个更大的元素。
    if (left < 0)
        return false;
    int right = nums.length - 1;
    // 从后面查找第一个比nums[left]大的值
    while (nums[right] <= nums[left])
        right--;
    swap(nums, left, right);
    // 反转后面升序的数字
    reverse(nums, left + 1, nums.length - 1);
    return true;
}

// 反转子数组[left,right]中的元素
private void reverse(int[] nums, int left, int right) {
    while (left < right)
        swap(nums, left++, right--);
}

// 交换数组中的两个数字
private void swap(int[] nums, int left, int right) {
    int tmp = nums[left];
    nums[left] = nums[right];
    nums[right] = tmp;
}

C++:

public:
    int nextGreaterElement(int n) {
        vector

  nums;         while (n != 0) {             nums.push_back(n % 10);             n /= 10;         }         reverse(nums.begin(), nums.end());         // 如果不存在下一个,返回 -1 。         if (!nextPermutation(nums))             return -1;         // 把数组转化为数字         long ans = 0;         for (int num: nums) {             ans = ans * 10 + num;             if (ans > INT_MAX)                 return -1;         }         return (int) ans;     }     bool nextPermutation(vector

  &nums) {         int left = nums.size() - 2;         // 两两比较,从后面往前找第一个降序的         while (left >= 0 && nums[left] >= nums[left + 1])             left--;         // 如果都是逆序的,也就是没有下一个更大的元素。         if (left < 0)             return false;         int right = nums.size() - 1;         // 从后面查找第一个比nums[left]大的值         while (nums[right] <= nums[left])             right--;         swap(nums[left], nums[right]);         // 反转后面升序的数字         reverse(nums.begin() + left + 1, nums.end());         return true;     }


Python:

def nextGreaterElement(self, n: int) -> int:
    nums = []
    while n != 0:
        nums.append(n % 10)
        n //= 10
    nums.reverse()  # 反转列表,使其从高位到低位
    # 如果不存在下一个更大的排列,返回 -1
    if not self.next_permutation(nums):
        return -1
        # 把列表转化为数字,同时检查是否超出int的范围
    ans = 0
    INT_MAX = 2 ** 31 - 1  # 模拟C++的INT_MAX
    for num in nums:
        ans = ans * 10 + num
        if ans > INT_MAX:
            return -1
    return ans

def next_permutation(self, nums: list[int]) -> bool:
    left = len(nums) - 2
    # 从后往前找第一个降序的位置
    while left >= 0 and nums[left] >= nums[left + 1]:
        left -= 1
        # 如果整个列表都是降序的,则没有下一个更大的排列
    if left < 0:
        return False
    right = len(nums) - 1
    # 从后往前找第一个比nums[left]大的数
    while nums[right] <= nums[left]:
        right -= 1
        # 交换nums[left]和nums[right]
    nums[left], nums[right] = nums[right], nums[left]
    # 反转left+1及其之后的部分
    nums[left + 1:] = reversed(nums[left + 1:])
    return True

笔者简介

博哥,真名:王一博,毕业十多年, 作者,专注于 数据结构和算法 的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解800多题,对算法题有自己独特的解题思路和解题技巧,喜欢的可以给个关注,也可以 下载我整理的1000多页的PDF算法文档 。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
新加坡蚊子去哪了?全球搞不定的事,一个热带小国却用50年做到了

新加坡蚊子去哪了?全球搞不定的事,一个热带小国却用50年做到了

狸猫之一的动物圈
2026-05-18 09:55:25
土豪的哪些普通行为刷新了你的认知?网友:单独给小偷准备了生活费

土豪的哪些普通行为刷新了你的认知?网友:单独给小偷准备了生活费

苗苗情感说
2026-05-25 06:48:35
母亲把积蓄全给舅舅,父亲平静说无妨,带全家迁往南方再没回故乡

母亲把积蓄全给舅舅,父亲平静说无妨,带全家迁往南方再没回故乡

麦子情感故事
2026-05-24 19:11:23
香港航天员将搭乘飞船升空

香港航天员将搭乘飞船升空

界面新闻
2026-05-22 20:36:23
华为122TB固态硬盘:用"直焊"绕过美国封锁

华为122TB固态硬盘:用"直焊"绕过美国封锁

全栈遛狗员
2026-05-24 01:25:50
德泽尔比:我感觉像在水下待了50天一样,但球员比我承受更多

德泽尔比:我感觉像在水下待了50天一样,但球员比我承受更多

懂球帝
2026-05-25 07:04:33
巅峰时期的QQ有多“狂”?2008年,腾讯竟打算用Q币给员工发工资

巅峰时期的QQ有多“狂”?2008年,腾讯竟打算用Q币给员工发工资

荆楚寰宇文枢
2026-05-14 23:20:07
记者:米兰1-2卡利亚里无缘欧冠,卡迪纳莱迅速离场

记者:米兰1-2卡利亚里无缘欧冠,卡迪纳莱迅速离场

懂球帝
2026-05-25 07:24:42
哈登自信能0-3翻盘!美媒晒眼神防守 名嘴:他一直是季后赛失败者

哈登自信能0-3翻盘!美媒晒眼神防守 名嘴:他一直是季后赛失败者

颜小白的篮球梦
2026-05-24 18:13:10
美股三大股指期货延续涨势

美股三大股指期货延续涨势

界面新闻
2026-05-25 07:38:51
“好豪迈的洛丽塔”,165cm未成年女儿穿搭火了,家长尴尬不敢认

“好豪迈的洛丽塔”,165cm未成年女儿穿搭火了,家长尴尬不敢认

妍妍教育日记
2026-05-12 18:46:53
他没秃,但变强了,一个44岁日本大叔的三年“一拳超人”实修录

他没秃,但变强了,一个44岁日本大叔的三年“一拳超人”实修录

国创漫话
2026-05-24 14:24:45
辽宁铁人5比0大胜!球迷:还是那帮人,为啥大羽和老徐差距这么大

辽宁铁人5比0大胜!球迷:还是那帮人,为啥大羽和老徐差距这么大

足球大腕
2026-05-24 23:40:07
陈慧琳弟弟陈司翰罕露面!49岁中年发福但气质儒雅,至今未婚未育引热议

陈慧琳弟弟陈司翰罕露面!49岁中年发福但气质儒雅,至今未婚未育引热议

今古深日报
2026-05-24 11:21:31
再见 FSD!特斯拉中国官宣改名,网友炸锅

再见 FSD!特斯拉中国官宣改名,网友炸锅

芝麻科技讯官方号
2026-05-25 00:05:22
爱德华兹谈文班亚马被驱逐:希望他继续被禁赛

爱德华兹谈文班亚马被驱逐:希望他继续被禁赛

甜份超标的我
2026-05-25 01:37:47
奖金102万!王欣瑜法网2-1险胜进第二轮:24岁中国莎娃又美又飒

奖金102万!王欣瑜法网2-1险胜进第二轮:24岁中国莎娃又美又飒

李喜林篮球绝杀
2026-05-24 19:53:16
上海交大对樊同学的“严重警告”,有多严重?

上海交大对樊同学的“严重警告”,有多严重?

呦呦鹿鸣
2026-05-21 17:18:49
47岁女星反击前夫:他撒谎,我没忽视孩子

47岁女星反击前夫:他撒谎,我没忽视孩子

娱圈观察员
2026-05-24 00:50:42
警惕这个新动向

警惕这个新动向

牛弹琴
2026-05-25 06:37:43
2026-05-25 08:23:00
数据结构和算法
数据结构和算法
专门介绍和写算法题解的号
273文章数 4关注度
往期回顾 全部

科技要闻

神舟二十三号航天员乘组顺利进驻“天宫”

头条要闻

暴雨突袭17岁少年赤膊上阵 让村民踩着他大腿肩膀转移

头条要闻

暴雨突袭17岁少年赤膊上阵 让村民踩着他大腿肩膀转移

体育要闻

唐斯发牌,大头逆袭:骑士跌向残忍夏季

娱乐要闻

王鹤棣掉粉超20万!代言和作品遭抵制

财经要闻

退市!33年“A股不死鸟”落幕

汽车要闻

国民家轿再上新 帝豪向上系列限时5.59万起

态度原创

房产
手机
健康
艺术
公开课

房产要闻

疯狂周末,海口楼市突然爆了!

手机要闻

OPPO开始发力:Reno新机再次被确认,超清云台主摄来袭!

外泌体 ≠ 生长因子!它们之间究竟有何区别?

艺术要闻

他把葡萄画成了美少女

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版