📅  最后修改于: 2023-12-03 15:25:04.655000             🧑  作者: Mango
作为一个程序员,基本算法技术是我们必须学会的,但是许多学术界未教授的算法技术同样重要。在本文中,我将介绍一些学术界未教授的基本算法技术,为你提供更多探索的方向。
位运算通常被用于二进制中的位操作。常见的位运算有:与运算(&)、或运算(|)、异或运算(^)、非运算(~)、左移运算(<<)和右移运算(>>)。
位运算可以应用于许多问题,包括位图、布隆过滤器、哈希表等。
/**
* 将一个整数转换为二进制字符串
* @param {number} num - 待转换整数
* @return {string} - 转换后的二进制字符串
*/
function toBinary(num) {
return (num >>> 0).toString(2);
}
链表是一种常见的数据结构,可以用来实现队列和栈等数据结构。通常,我们可以通过遍历链表来实现插入、删除、搜索等操作。
/**
* 链表节点
*/
class ListNode {
constructor(val, next) {
this.val = val;
this.next = next;
}
}
/**
* 删除链表中的重复元素
* @param {ListNode} head - 链表头节点
* @return {ListNode} - 处理后的链表头节点
*/
function deleteDuplicates(head) {
if (!head || !head.next) {
return head;
}
let cur = head;
while (cur.next) {
if (cur.val === cur.next.val) {
cur.next = cur.next.next;
} else {
cur = cur.next;
}
}
return head;
}
动态规划是一种用于解决一些复杂问题的算法。通常,我们可以将原问题分解为若干个子问题,并使用动态规划技术解决这些子问题。
动态规划通常应用于字符串、矩阵等问题,如最长回文子串、最小路径和等。
/**
* 最小路径和
* @param {number[][]} grid - 网格
* @return {number} - 最小路径和
*/
function minPathSum(grid) {
const m = grid.length;
const n = grid[0].length;
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
if (i === 0 && j === 0) {
continue;
} else if (i === 0) {
grid[i][j] += grid[i][j - 1];
} else if (j === 0) {
grid[i][j] += grid[i - 1][j];
} else {
grid[i][j] += Math.min(grid[i - 1][j], grid[i][j - 1]);
}
}
}
return grid[m - 1][n - 1];
}
编程是一种不断学习和探索的过程。学术界未教授的基本算法技术,或许能够给你提供更多探索的方向。希望这篇文章对你有所帮助。