2021-04-11算法打卡
1、给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。
示例1:
输入:head = [4,2,1,3]
输出:[1,2,3,4]示例2:
输入:head = [-1,5,3,4,0]
输出:[-1,0,3,4,5]
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
*this.val = (val===undefined ? 0 : val)
*this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var sortList = function(head) {
if (!head || !head.next) return head
let arr = []
for (;
head;
head = head.next) {
arr.push(head)
}
arr.sort((a,b)=> a.val - b.val)
for(let i = 0;
i < arr.length;
i++) {
arr[i].next = arr[i+1] || null
}return arr[0]
};
2、汉诺塔问题
在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:
(1) 每次只能移动一个盘子;
(2) 盘子只能从柱子顶端滑出移到下一根柱子;
(3) 盘子只能叠在比它大的盘子上。
【2021-04-11算法打卡】请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子。你需要原地修改栈。
示例1:
输入:A = [2, 1, 0], B = [], C = []
输出:C = [2, 1, 0]示例2:
输入:A = [1, 0], B = [], C = []
输出:C = [1, 0]
/**
* @param {number[]} A
* @param {number[]} B
* @param {number[]} C
* @return {void} Do not return anything, modify C in-place instead.
*/
var hanota = function(A, B, C) {
if(A.length === 0) {
return;
}
while(A.length > 1) {
B.push(A.pop())
}
C.push(A.pop());
while(B.length > 0) {
A.push(B.pop());
};
hanota(A, B, C)
};
推荐阅读
- 算法|【路径规划】基于蚁群算法求解栅格地图路径规划问题matlab源码含GUI
- 算法|【TSP问题】基于蚁群算法求解TSP问题matlab源码
- 最优化实战例子|万字长文带你了解蚁群算法及求解复杂约束问题【源码实现】
- 03.02刺猬打卡
- 算法|面试时遇到一致性哈希算法这样回答会让面试官眼前一亮
- 深度学习论文研读|目标检测网络R-CNN系列与yolov1算法原理概述
- 蔡康永的201节情商课2019/2/14|蔡康永的201节情商课2019/2/14 M 读书打卡2
- 常用算法思想
- 雯雯读书打卡第二十八天
- 新闻笔记@人工智能加速期:算法为王还是场景落地优先()