
算法
ExMaterial
努力成为全栈工程师中。(2024年10月1日)
展开
-
用JavaScript实现的排序算法(二)——归并排序、快速排序
上一篇文章讲了冒泡排序、选择排序、插入排序。这篇文章来讲归并排序和快速排序。归并排序是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。下面来看代码实现:时间复杂度为:O(nlogn)快速排序算法通过多次比较和交换来实现排序,其排序流程如下:(1)首先设定一个分界值,通过该分界值将数组分成左右两部分。(2原创 2022-06-28 13:15:06 · 165 阅读 · 0 评论 -
用JavaScript实现的排序算法(一)——冒泡排序、选择排序、插入排序
虽然JavaScript本身给我们提供了sort排序方法,但是了解并掌握其它的排序算法能让你在面试中底气更足。话不多说,来看看这些算法是如何实现的吧!原创 2022-06-22 04:00:00 · 849 阅读 · 0 评论 -
Top101-BM3-链表中的节点每k个一组翻转 -(JavaScript实现)
BM3 链表中的节点每k个一组翻转function reverseKGroup( head , k ) { let pre = null; let curr = head; let node = head; for (let i = 0; i < k; i++) { if (node === null) { return head } node = node.next } for原创 2022-04-12 12:39:36 · 724 阅读 · 0 评论 -
Top101-BM2-链表内指定区间反转-(JavaScript实现)
BM2 链表内指定区间反转function reverseBetween( head , m , n ) { const dummy_node = new ListNode(-1); dummy_node.next = head; let pre = dummy_node; for (let i = 0; i < m - 1; i++) { pre = pre.next; } let cur = pre.next; for原创 2022-04-11 15:57:19 · 1309 阅读 · 0 评论 -
Top101-BM1-反转链表-(JavaScript实现)
BM1 反转链表var reverseList = function(head) { // 如果列表为空,不需要反转 if (head === {}) return {}; // 设置两个指针 // 上一个节点的指针,初始值为空 let prev = null; // 当前节点的指针 let curr = head; // 定义一个临时变量 let temp; while (curr !== null) { /原创 2022-04-10 20:11:11 · 842 阅读 · 0 评论 -
力扣977 有序数组的平方 (JavaScript语言实现)
977.有序数组的平方给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。// 暴力破解var sortedSquares = function(nums) { let newNums = []; for (let i = 0; i < nums.length; i++) { newNums.push(nums[i] * nums[i]) } return newNums.sort((a原创 2022-04-09 19:44:02 · 555 阅读 · 0 评论 -
代码随想录-数组之移除元素篇-包含力扣27、26、283、844、977题-(JavaScript语言实现)
27.移除元素var removeElement = function(nums, val) { let k = 0; for (let i = 0; i < nums.length; i++) { if (nums[i] !== val) { nums[k++] = nums[i] } } return k}26.删除有序数组中的重复项var removeDuplicates = function(n原创 2022-04-09 19:40:28 · 185 阅读 · 0 评论 -
代码随想录-数组之二分查找篇-包含力扣704、35、34、69、367题-(JavaScript语言实现)
我会把我觉得需要讲解的地方加上注释,鉴于我本人智商不太高,所以我觉得我能理解的你也应该可以理解。希望这一系列文章能帮你走好算法学习之路。原创 2022-04-08 20:53:09 · 214 阅读 · 0 评论 -
两数相加(JavaScript)
var addTwoNumbers = function(l1, l2) { // 定义初识链表头尾节点 let head = null, tail = null; // 存储进位值 let carry = 0; // 终止条件,l1和l2均为空 while (l1 || l2) { // 将两个非空列表的值取出 const n1 = l1 ? l1.val : 0; const n2 = l2 ? l2.val原创 2022-04-07 23:01:30 · 632 阅读 · 0 评论 -
回文链表(JavaScript)
var isPalindrome = function(head) { // 定义一个空数组来存储数据 let vals = []; // 遍历整个链表,将其值加到数组中 while (head !== null) { vals.push(head.val); head = head.next; } // 头尾元素进行比较,如果不相同则返回false for (let i = 0, j = vals.length - 1原创 2022-04-06 22:24:18 · 500 阅读 · 0 评论 -
奇偶链表(JavaScript)
var oddEvenList = function(head) { // 链表为空则直接返回 if (head === null) return head; // 定义偶链表的开头 let evenHead = head.next; // 定义奇偶链表的开头 let odd = head, even = evenHead; // 全部节点分离完毕的条件是 even 为空节点或者 even.next 为空节点 while (even !== nul原创 2022-04-05 22:54:28 · 1009 阅读 · 0 评论 -
设计链表(JavaScript)
class LinkNode { constructor(val, next) { this.val = val; this.next = next; }}var MyLinkedList = function() { this._size = 0; this._tail = null; this._head = null;};/** * @param {number} index * @return {number}原创 2022-04-04 22:23:05 · 93 阅读 · 0 评论 -
杨辉三角&杨辉三角 || (JavaScript)
118. 杨辉三角var generate = function(numRows) { // 定义一个空数组收集结果 let ret = []; for (let i = 0; i < numRows; i++) { // 依据行数来确定每一行有多长,并将其用1填充 const row = new Array(i + 1).fill(1); // 因为第一项和最后一项一定是1,所以数组下标如下 for (let原创 2022-04-03 21:29:15 · 697 阅读 · 0 评论 -
反转链表(JavaScript)
var reverseList = function(head) {// 如果列表为空,不需要反转if (head === {}) return {};// 设置两个指针// 上一个节点的指针,初始值为空let prev = null;// 当前节点的指针let curr = head;// 定义一个临时变量let temp;while (curr !== null) {// 用临时变量记录后一个节点temp = curr.next;// 断开当前节点与后面节点的指针curr.n原创 2022-04-02 22:14:25 · 674 阅读 · 0 评论 -
最长公共前缀(JavaScript)
var longestCommonPrefix = function(strs) { // 如果strs长度为零 ,直接返回。 if (strs.length === 0) return ""; // 将数组第一个字符串作为对比值 let ans = strs[0]; // 遍历剩下的字符串 for (let i = 1; i < strs.length; i++) { // 遍历两个字符串中最短的就可 for (let原创 2022-04-01 21:49:59 · 331 阅读 · 0 评论 -
对角线遍历(JavaScript)
var findDiagonalOrder = function(mat) { // 定义一个数组接受返回元素 let a = []; // 列数 let rowLength = mat.length - 1; // 行数 let colLength = mat[0].length - 1; // 定义起始值 let k = 0, l = 0; // 对角线遍历所有元素 for (let i = 0; i <= rowLe原创 2022-03-31 22:40:32 · 515 阅读 · 0 评论 -
搜索插入位置和在排序数组中查找元素的第一个和最后一个位置(JavaScript语言实现)
一、LC第35题搜索插入位置1 暴力插入(时间击败92%)时间复杂度O(n)var searchInsert = function(nums, target) { for (let i = 0; i < nums.length; i++) { if (nums[i] >= target) { return i; } } return nums.length;}2 二分查找第一种写法 左闭右闭(时间击败80原创 2022-03-29 15:35:22 · 439 阅读 · 0 评论 -
二分查找与移除元素(JavaScript语言实现)
二分查找与移除元素(JavaScript语言实现)算法学习第一天二分查找leetcode题目链接:https://leetcode-cn.com/problems/binary-search/题目:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。var search = function(nums, target) { let left = 0, right =原创 2022-03-08 23:10:25 · 7495 阅读 · 0 评论