此文章中的算法题目均来自 力扣(LeetCode)
1. 寻找两个正序数组的中位数
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
示例 1:
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
示例 2:
输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
示例 3:
输入:nums1 = [0,0], nums2 = [0,0]
输出:0.00000
示例 4:
输入:nums1 = [], nums2 = [1]
输出:1.00000
示例 5:
输入:nums1 = [2], nums2 = []
输出:2.00000
解答:
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number}
*/
var findMedianSortedArrays = function (nums1, nums2) {
var arr = nums1.concat(nums2)
arr.sort(function (a, b) {
return a - b
})
var resullt = 0;
// 排序完成,计算中位数
var len = arr.length
var median = len / 2;
if (len % 2 === 0) {
resullt = (arr[median] + arr[median - 1]) / 2
} else {
resullt = arr[Math.floor(median)]
}
return resullt
};
2. 最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
示例 3:
输入:s = "a"
输出:"a"
示例 4:
输入:s = "ac"
输出:"a"
解答:
/**
* @param {string} s
* @return {string}
*/
var longestPalindrome = function (s) {
var palindrome = "";
function isPalindrome(a, b, str) {
if (s[a] && s[b] && s[a] === s[b]) {
str = s[a] + str + s[a]
return isPalindrome(a - 1, b + 1, str);
} else {
return str;
}
}
for (var i = 0; i < s.length - 1; i++) {
var el = s[i];
var palindromeStay = "";
// 判断下一位与当前位是否相同
if (el === s[i + 1]) {
palindromeStay = isPalindrome(i - 1, i + 2, el + el);
}
var palindromeStayB = isPalindrome(i - 1, i + 1, el);
if (palindromeStayB.length > palindromeStay.length) palindromeStay = palindromeStayB;
if (palindromeStay.length > palindrome.length) palindrome = palindromeStay;
}
return palindrome === "" ? s[0] : palindrome;
};
3. Z 字形变换
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:
P A H N
A P L S I I G
Y I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。
请你实现这个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
示例 1:
输入:s = "PAYPALISHIRING", numRows = 3
输出:"PAHNAPLSIIGYIR"
示例 2:
输入:s = "PAYPALISHIRING", numRows = 4
输出:"PINALSIGYAHRPI"
解释:
P I N
A L S I G
Y A H R
P I
示例 3:
输入:s = "A", numRows = 1
输出:"A"
解答:
/**
* @param {string} s
* @param {number} numRows
* @return {string}
*/
var convert = function (s, numRows) {
if(numRows === 1) return s;
var result = ''
var arr = [];
var max = numRows + numRows - 2
for (var i = 0; i < s.length; i++) {
var index = Math.floor(i / max)
var nowI = i % max;
var el = s[i]
if (nowI < numRows) {
if (arr[nowI]) {
arr[nowI].push(el);
} else {
arr[nowI] = [el];
}
} else {
var elI = max - nowI;
for (let j = 0; j < arr.length; j++) {
if (j === elI) {
arr[j].push(el);
} else {
arr[j].push('')
}
}
}
}
for (let i = 0; i < arr.length; i++) {
result += arr[i].join('')
}
return result;
};
如有疑问,欢迎留言。
本人也会不定期的更新一些其他的前端干货,或者此类的算法联系,欢迎各位点赞、关注、留言。谢谢观看!!!