两个数组的交集
349.两个数组的交集描述给定两个数组,编写一个函数来计算它们的交集。
示例
示例1
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
示例2
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
代码及思路思路对这两个数组中的任意一个数组进行遍历,然后判断另一个数组中是有这个值,如果有就把这个值添加到到结果集合中(主要考虑到集合的元素不重复)。遍历结束后,将集合转为数组返回即可。
代码1234567891011121314/** * @param {number[]} nums1 * @param {number[]} nums2 * @return {number[]} */let intersection = function(nums1, nums2) { let res = new Set(); for(let item of nums1) { if(nums2.includes(item)) ...
多数元素
169.多数元素描述给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例
示例1
输入: [3,2,3]
输出: 3
示例2
输入: [2,2,1,1,1,2,2]
输出: 2
代码及思路思路遍历数组,利用map,记录相同数字出现的次数。如果某一个元素出现的次数大于n/2,则直接返回这个元素。
代码1234567891011121314151617/** * @param {number[]} nums * @return {number} */let majorityElement = function(nums) { let map = new Map(); for(let item of nums) { if(map.has(item)) { map.set(item, map.get(item) + 1); } else { ma ...
杨辉三角
118.杨辉三角描述给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例
示例1
代码及思路思路仔细观察一下,可以看出来每个数组的第一位和最后一位都为1,并且大数组的第n个元素数组长度为n。所以假设大数组为arr, i 为第i个元素数组,会有arr[i][0] = 1 和 arr[i][i] = 1;这样第i个元素数组的首元素和最后一个元素就都值啦。中间元素的值可以写一个循环arr[i][j] = arr[i-1][j-1] + arr[i-1][j].
代码12345678910111213141516/** * @param {number} numRows * @return {number[][]} */let generate = function(numRows) { let res = []; for(let i = 0; i < numRows; i++) { res[i] = []; res[i][0] ...
矩阵置零
73.矩阵置零描述给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。
示例
示例1
输入:
[
[1,1,1],
[1,0,1],
[1,1,1]
]
输出:
[
[1,0,1],
[0,0,0],
[1,0,1]
]
示例2
输入:
[
[0,1,2,0],
[3,4,5,2],
[1,3,1,5]
]
输出:
[
[0,0,0,0],
[0,4,5,0],
[0,3,1,0]
]
思路及代码思路暂且不管题目中要求原地算法。不管白猫还是黑猫。能抓住老鼠就是好猫。于是我就大胆的开始想方法啦。
既然要把0所在的行和列都要置为0,首先要把出现0的位置记录下来。然后就有下面的代码:
12345678910111213141516/** * @param {number[][]} matrix * @return {void} Do not return anything, modify matrix in-place instead. */ ...
加一
66.加一描述给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例
示例1
输入:[1,2,3]
输出:[1,2,4]
示例2
输入:[4,3,2,1]
输出:[4,3,2,2]
代码及其思路思路看到这个题目,第一反应思路:把数组转为数字,然后加1,然后再转为数组。所以有了以下代码:
12345678910111213/** * @param {number[]} digits * @return {number[]} */var plusOne = function(digits) { let sum = 0; for(let i = 0; i < digits.length; i++){ sum += digits[i] * Math.pow(10, digits.length - i - 1); } let res = sum ...
pow(x,n)
pow(x,n)描述实现 pow(x, n) ,即计算 x 的 n 次幂函数
示例
示例 1:
输入: 2.00000, 10
输出: 1024.00000
示例2
输入: 2.10000, 3
输出: 9.26100
示例 3:
输入: 2.00000, -2
输出: 0.25000
题解及思路思路其实第一反应是这个Math.pow(x,n),的确可以,但是….
另一个思路写个循环不断的相乘,理论上可以,但是超出时间限制
另一个想法:pow(x,n),如果n为偶数,那么pow(x,n) = pow(x, n/2)*pow(x, n/2),这个时候无论n是否为正数,这么算都是可以的。比如pow(2,4)和pow(2,-4);如果n为奇数,且n为正数 pow(x,n) = pow(x, parseInt(n/2))*pow(x, parseInt(n/2))*x,如果n为负数pow(x,n) = pow(x, parseInt(n/2))*pow(x, parseInt(n/2))\/x;这个就是递归,递归的停止条件是当n等于0的时候返回1.
代码1234 ...
回文数
leetcode-9.回文数描述判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例
示例1
输入:121
输出: true
示例2
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
题解及分析思路
分析思路也许(肯定)不是最优,只是想法。
思路输入是一个整数,如果这个整数小于0,那么可定不是回文数。返回false。
如果这个正是整数大于0,可以把这个整数转为字符串数组:(num+’’).split(“”),例如12321 => [‘1’, ‘2’, ‘3’, ‘2’, ‘1’],然后利用两个变量left和right,不断去判断第n个和倒数第n个是否相等即可。
代码1234567891011121314151617181920/** * @param {number} x * @return {boolean ...
node核心模块——os
node module: os
os.EOL
string类型
操作系统特定的行末标志。
在POSIX上是 \n
在Windows上是 \r\n
1console.log('hello' + os.EOL + 'world');
PS: \r: 回到当前行的最左边;\n: 向下移动一行,并不左右移动
os.arch()
返回<string>
返回为其编译 Node.js 二进制文件的操作系统的 CPU 架构。 可能的值有:’arm’、 ‘arm64’、 ‘ia32’、 ‘mips’、 ‘mipsel’、 ‘ppc’、 ‘ppc64’、 ‘s390’、 ‘s390x’、 ‘x32’ 和 ‘x64’。返回的值等价于 process.arch。
1console.log(os.arch());// x64
os.constants
Object类型
包含错误码、进程信号等常用的操作系统特定的常量。
os.cpus()
返回<Object[]>
返回一个对象数组, ...
centos7安装jenkins和gitlab踩坑记
centos7安装jenkins和gitlab踩坑记一、背景
主机: win10
虚拟机: centos7
目标:成功安装 gitlab&jenkins,并且可以正常利用 gitlab 的 push event webhook 触发 jenkins 的自动构建任务。
二、安装gitlab首先要在CentOS系统上面安装所需的依赖:ssh、防火墙、postfix(用于邮件通知)、wegt,以下这些命令也会打开系统防火墙中的HTTP和SSH端口访问。
安装ssh协议
安装命令: yum install -y curl policycoreutils-python openssh-server
设置ssh服务开机自启动
安装命令: ystemctl enable sshd
启动ssh服务
启动命令: systemctl start sshd
安装防火墙
安装命令: yum install firewalld systemd -y
开启防火墙
开启命令: service firewalld start
添加http服务到firewalld
命令: firewall-cmd ...
node核心模块——fs
node module fs
注:斜体加粗的api是有疑问的。
所有文件系统操作都具有同步和异步的形式
大多数 fs 操作接受的文件路径可以指定为字符串、Buffer、或使用 file:协议的 URL对象
文件描述符: 在 POSIX 系统上,对于每个进程,内核都维护着一张当前打开着的文件和资源的表格。 每个打开的文件都分配了一个称为文件描述符的简单的数字标识符。 在系统层,所有文件系统操作都使用这些文件描述符来标识和跟踪每个特定的文件。 Windows 系统使用了一个虽然不同但概念上类似的机制来跟踪资源。 为了简化用户的工作,Node.js 抽象出操作系统之间的特定差异,并为所有打开的文件分配一个数字型的文件描述符。
fs.Dir代表目录流的类
由 fs.opendir()、fs.opendirSync() 或 fsPromises.opendir() 创建。
dir.close() 返回promise,将会在关闭资源之后被resolve。这个方法的作用时异步地关闭目录底层资源句柄。随后的读取将会导致错误。
dir.close(callback) 这个方法的作用 ...