JS算法-最大数

简介: JS算法-最大数

题目


给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。

输入: nums = [10,2]
输出: "210"


题解


第一种


我们先声明一个largestNumber函数,在函数接受一个参数 a,这个参数是一个数组,如果没有传入参数,默认为一个空数组。 然后在函数中我们将数组 a 中的每个元素都转换成字符串,这是因为后面排序时需要将元素转换为字符串类型。我们这里使用 map() 方法进行遍历数组中的每个元素,它的返回值是一个新的数组,我们在用参数a进行接收下,新数组中的每个元素都是原数组中的对应元素经过处理后的结果。 然后,使用冒泡排序算法对数组进行排序。重复地遍历数组,每次比较相邻两个元素,如果前面的元素大于后面的元素,则交换它们的位置,直到数组完全排序。 最后,如果数组中最大的数是 0,那么返回字符串 "0",否则将排序后的数组元素连接成一个字符串并返回。 函数中的 bubbleSort() 函数用于实现冒泡排序,它接受一个数组作为参数,使用双重循环遍历数组,每次比较相邻的两个元素,如果前一个元素比后一个元素大,则交换它们的位置。循环结束后,数组就完成了排序

var largestNumber = function (a) {
  a = a || [];
  a = a.map(function (item) {
    return '' + item;
  });
  bubbleSort(a);
  if (a[0] == '0') {
    return '0';
  }
  return a.join('');
}
function bubbleSort(arr) {
  var temp;
  var len = arr.length;
  var i, j;
  for (i = 0; i < len - 1; i++) {
    for (j = 0; j < len - 1 - i; j++) {
      if ((arr[j] + arr[j + 1]) < (arr[j + 1] + arr[j])) {
        temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }
}


第二种


我们这里将两个数字转为字符串相加,再将相加后的字符串转为数字返回。由于sort()默认是按升序排序,所以这里返回的是ba的组合减去a和b的组合,这样在数组排序后就能得到从大到小排列的数组,最后判断如果第一个数字是0,则说明数组中所有数字都是0,返回字符串"0",否则将数组拼接成一个字符串返回

var largestNumber = function (nums) {
  nums.sort((a, b) => {
      return ('' + b + a) - ('' + a + b)
  })
  return nums[0] ? nums.join("") : "0"
};
相关文章
|
5天前
|
监控 算法 JavaScript
基于 Node.js Socket 算法搭建局域网屏幕监控系统
在数字化办公环境中,局域网屏幕监控系统至关重要。基于Node.js的Socket算法实现高效、稳定的实时屏幕数据传输,助力企业保障信息安全、监督工作状态和远程技术支持。通过Socket建立监控端与被监控端的数据桥梁,确保实时画面呈现。实际部署需合理分配带宽并加密传输,确保信息安全。企业在使用时应权衡利弊,遵循法规,保障员工权益。
20 7
|
3天前
|
存储 监控 JavaScript
深度探秘:运用 Node.js 哈希表算法剖析员工工作时间玩游戏现象
在现代企业运营中,确保员工工作时间高效专注至关重要。为应对员工工作时间玩游戏的问题,本文聚焦Node.js环境下的哈希表算法,展示其如何通过快速查找和高效记录员工游戏行为,帮助企业精准监测与分析,遏制此类现象。哈希表以IP地址等为键,存储游戏网址、时长等信息,结合冲突处理与动态更新机制,确保数据完整性和时效性,助力企业管理层优化工作效率。
16 3
|
4月前
|
算法 JavaScript 前端开发
第一个算法项目 | JS实现并查集迷宫算法Demo学习
本文是关于使用JavaScript实现并查集迷宫算法的中国象棋demo的学习记录,包括项目运行方法、知识点梳理、代码赏析以及相关CSS样式表文件的介绍。
第一个算法项目 | JS实现并查集迷宫算法Demo学习
|
5月前
|
JavaScript 算法 前端开发
JS算法必备之String常用操作方法
这篇文章详细介绍了JavaScript中字符串的基本操作,包括创建字符串、访问特定字符、字符串的拼接、位置查找、大小写转换、模式匹配、以及字符串的迭代和格式化等方法。
JS算法必备之String常用操作方法
|
5月前
|
JavaScript 算法 前端开发
JS算法必备之Array常用操作方法
这篇文章详细介绍了JavaScript中数组的创建、检测、转换、排序、操作方法以及迭代方法等,提供了数组操作的全面指南。
JS算法必备之Array常用操作方法
|
5月前
|
算法 JavaScript 前端开发
国标非对称加密:RSA算法、非对称特征、js还原、jsencrypt和rsa模块解析
国标非对称加密:RSA算法、非对称特征、js还原、jsencrypt和rsa模块解析
355 1
|
5月前
|
JavaScript 算法 前端开发
"揭秘Vue.js的高效渲染秘诀:深度解析Diff算法如何让前端开发快人一步"
【8月更文挑战第20天】Vue.js是一款备受欢迎的前端框架,以其声明式的响应式数据绑定和组件化开发著称。在Vue中,Diff算法是核心之一,它高效计算虚拟DOM更新时所需的最小实际DOM变更,确保界面快速准确更新。算法通过比较新旧虚拟DOM树的同层级节点,递归检查子节点,并利用`key`属性优化列表更新。虽然存在局限性,如难以处理跨层级节点移动,但Diff算法仍是Vue高效更新机制的关键,帮助开发者构建高性能Web应用。
86 1
|
5月前
|
算法 JavaScript 前端开发
对称加密算法解析:DES、AES及其在`pycryptodome` 和 `crypto-js` 模块中的应用
对称加密算法解析:DES、AES及其在`pycryptodome` 和 `crypto-js` 模块中的应用
232 1
|
12天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
145 80
|
5天前
|
机器学习/深度学习 算法
基于遗传优化的双BP神经网络金融序列预测算法matlab仿真
本项目基于遗传优化的双BP神经网络实现金融序列预测,使用MATLAB2022A进行仿真。算法通过两个初始学习率不同的BP神经网络(e1, e2)协同工作,结合遗传算法优化,提高预测精度。实验展示了三个算法的误差对比结果,验证了该方法的有效性。