提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
最长连续递增序列
题目链接
题解
function findLengthOfLCIS(nums: number[]): number {
// 动态规划思想
let arr = []
let res = 1
// 用ans[i]表示以第i个元素结尾的最长递增连续子序列
arr[0] = 1
for (let i = 1; i < nums.length; i++) {
// 如果nums[i] > nums[i - 1],那么当前这个数连接到前一个数一定是最优的
if (nums[i] > nums[i - 1]) {
arr[i] = arr[i - 1] + 1
} else {//否则作为单独的序列
arr[i] = 1
}
// 最后一个取最大值为题解
res = Math.max(res, arr[i])
}
return res
};
判断矩阵是否是一个 X 矩阵
题目链接
题解
function checkXMatrix(grid: number[][]): boolean {
/*
小知识:主对角线:横纵坐标相等,
副对角线:横坐标+纵坐标的值等于矩阵的行数-1
*/
let n = grid.length
for (let i = 0; i < n; ++i) {
for (let j = 0; j < n; ++j) {
// 判断主副对角线
if (i == j || i + j == n - 1) {
// 如果是0则不满足矩阵
if (!grid[i][j]) {
return false
}
} else {//非主副对角线
if (grid[i][j]) {//如果不是0则不满足条件
return false
}
}
}
}
return true
};
两个列表的最小索引总和
题目链接
题解
/**
* @param {string[]} list1
* @param {string[]} list2
* @return {string[]}
*/
var findRestaurant = function (list1, list2) {
// 创建一个数组和一个集合
let arr = [],
map = new Map()
// 将list1存入map kay为item value为index
for (let [index, item] of list1.entries()) {
map.set(item, index)
}
// 遍历list2
for (let i = 0; i < list2.length; i++) {
const item = list2[i];
// 如果map中有当前值
if (map.has(item)) {
// console.log(map.get(item), i)
// 这步是保证有序性
let index = i + map.get(item)
// 如果arr此项为数组将当前值push进去
if (Array.isArray(arr[i + map.get(item)])) {
arr[index].push(item)
} else {
// 不是数组将当前值用数组包裹存入
arr[index] = [item]
}
}
}
for (let item of arr) {
if (item) {
return item
}
}
return []
};