🧮 Algorithm Notebook
1、算法准备
1.1 牛客网编程OJ的典型输入输出
2、算法框架
2.1 动态规划
2.1.1 斐波那契数列
2.1.2 背包问题
2.1.3 贪心算法
2.1.4 序列和数组类问题
2.1.5 编辑距离
2.1.6 高楼扔鸡蛋
2.1.7 股票问题系列通解
2.1.8 最长有效括号
2.1.9 剪绳子
2.1.10 正则表达式匹配
2.2 二分查找
2.2.1 二分查找框架
2.2.2 搜索旋转排序数组
2.3 链表
2.3.1 反转链表
2.3.2 相交链表
2.3.3 合并链表
2.3.4 链表中倒数第k个节点
2.3.5 复制带随机指针的链表
2.4 排序算法
2.4.1 常见排序算法
2.5 二叉树
2.5.1 二叉树遍历
2.5.2 岛屿问题
2.5.3 二叉树路径问题
2.5.4 构造二叉树
2.6 回溯算法
2.6.1 回溯算法解题框架
2.6.2 N皇后
2.7 数组
2.7.1 删除有序数组中的重复项
2.7.2 滑动窗口最大值
2.7.3 调整数组顺序使奇数位于偶数前面
2.7.4 螺旋矩阵
2.7.5 多数元素
2.7.6 最大数
2.7.7 和为s的两个数字
2.7.8 构建乘积数组
2.7.9 两数之和
2.8 字符串
2.8.1 最小覆盖子串
2.8.2 比较版本号
2.8.3 验证IP地址
2.8.4 基本计算器 II
2.8.5 字符串解码
2.8.6 移掉 K 位数字
2.8.7 无重复字符的最长子串
2.8.8 第一个只出现一次的字符
2.8.9 翻转字符串里的单词
2.8.10 字符串转换整数 (atoi)
2.8.11 字符串四则运算
2.9 栈
2.9.1 最小栈
2.9.2 弹出序列
2.10 数学
2.10.1 用 Rand7() 实现 Rand10()
2.10.2 只出现一次的数字
2.10.3 整数反转
2.10.4 求1+2+…+n
2.10.5 二进制中1的个数
2.10.6 幂运算
2.10.7 1~n 整数中 1 出现的次数
2.10.8 数字序列中某一位的数字
2.10.9 丑数
2.10.10 n个骰子的点数
2.10.11 圆圈中最后剩下的数字
2.10.12 不用加减乘除做加法
2.10.13 x 的平方根
2.11 设计
2.11.1 LRU 缓存机制
-
+
游客
注册
登录
最大数
## 1 题目 给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。 注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。 **示例 1:** ``` 输入:nums = [10,2] 输出:"210" ``` **示例 2:** ``` 输入:nums = [3,30,34,5,9] 输出:"9534330" ``` **示例 3:** ``` 输入:nums = [1] 输出:"1" ``` **示例 4:** ``` 输入:nums = [10] 输出:"10" ``` **提示:** * 1 <= nums.length <= 100 * 0 <= nums[i] <= 109 ## 2 解题思路 ### 2.1 互换位置 #### 2.1.1 问题分析 1. 可以先遍历整个数组,然后比较两个数字组成字符串对应的数字的大小,然后将二者互换位置,将较大的数字放在数组前面。 2. 在对数字组成字符串对应的数字进行比较时,**可以通过将两个数字互换位置,然后比较组成的两个数字字符串的大小即可**,在对两个数字字符串进行比较时需要注意,如果直接将其转换位数字来比较的话可能会越界,所以需要按照字符串的格式**从高位到低位逐位比较,直到可以区分两个字符串的大小即可**。 3. 当所有数字比较完成后,需要判断一下是否所有数字全部为 0,因为如果都为 0 的话,按照正常的逻辑,后面生成的字符串为 `"000..."` 的格式,这样是不正确的,所以需要判断一下是否所有数字都为 0,如果都为 0 的话,直接返回 `"0"` 即可。 1. 判断时只需要判断比较完的数组的第一个元素是否为 0 即可,因为如果第一个元素为 0 的话,后面的元素一定全部为 0。 #### 2.1.2 参考代码 ```java /** * 比较两个数所包含元素的最大值的大小 * * @param a 一个数 * @param b 另一个数 * @return 两个数所包含元素的最大值的大小 */ public int compare(int a, int b) { String combineAB = a + "" + b; String combineBA = b + "" + a; for (int i = 0; i < combineAB.length(); i++) { int ab = combineAB.charAt(i); int ba = combineBA.charAt(i); if (ab != ba) {return ab - ba;} } return 0; } /** * 179. 最大数 * * @param nums 数组 * @return 数组中的元素组合成的最大整数 */ public String largestNumber(int[] nums) { String s = ""; for (int i = 0; i < nums.length - 1; i++) { for (int j = i + 1; j < nums.length; j++) { if (compare(nums[i], nums[j]) < 0) { int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } } } boolean allZero = true; for (int i = 0; i < nums.length; i++) { if (nums[i] != 0) {allZero = false;} s += nums[i]; } return allZero ? "0" : s; } ``` ## 3 参考文献 1. [179. 最大数](https://leetcode-cn.com/problems/largest-number)。
ricear
2022年2月9日 19:50
©
BY-NC-ND(4.0)
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码