合并两个有序数组
function mergeArrays(arr1, arr2) {
let mergedArray = [];
let index1 = 0;
let index2 = 0;
while (index1 < arr1.length && index2 < arr2.length) {
if (arr1[index1] < arr2[index2]) {
mergedArray.push(arr1[index1]);
index1++;
} else {
mergedArray.push(arr2[index2]);
index2++;
}
}
// 将剩余的元素追加到合并数组中
while (index1 < arr1.length) {
mergedArray.push(arr1[index1]);
index1++;
}
while (index2 < arr2.length) {
mergedArray.push(arr2[index2]);
index2++;
}
return mergedArray;
}
const arr1 = [1, 3, 5, 7];
const arr2 = [2, 4, 6, 8];
console.log(mergeArrays(arr1, arr2)); // 输出 [1, 2, 3, 4, 5, 6, 7, 8]
移除元素
function removeElement(arr, val) {
const index = arr.indexOf(val);
if (index > -1) {
arr.splice(index, 1);
}
return arr;
}
删除有序数组中的重复项
function removeDuplicates(nums) {
if (nums.length === 0) return 0;
let i = 0;
for (let j = 1; j < nums.length; j++) {
if (nums[j] !== nums[i]) {
i++;
nums[i] = nums[j];
}
}
return i + 1;
}
多数元素
function majorityElement(nums) {
let map = {};
let len = nums.length;
let majority = -1;
// 统计每个元素出现的次数
nums.forEach(function(num) {
map[num] = (map[num] || 0) + 1;
if (map[num] > len / 2) majority = num;
});
return majority;
}
// 示例
let nums = [3, 2, 3, 1, 3, 3, 2];
console.log(majorityElement(nums)); // 输出 3
轮转数组
function rotateArray(arr, n) {
n = n % arr.length; // 处理n为负数或大于数组长度的情况
return arr.slice(-n).concat(arr.slice(0, -n));
}
// 示例
var arr = [1, 2, 3, 4, 5];
var rotatedArr = rotateArray(arr, 2); // 将数组向前移动2个位置
console.log(rotatedArr); // 输出: [3, 4, 5, 1, 2]
买卖股票最佳时机
function maxProfit(prices) {
let minPrice = Infinity;
let maxProfit = 0;
for (let price of prices) {
if (price < minPrice) {
minPrice = price;
} else if (price - minPrice > maxProfit) {
maxProfit = price - minPrice;
}
}
return maxProfit ? maxProfit : 0;
}
// 示例使用
const prices = [7, 1, 5, 3, 6, 4];
console.log(maxProfit(prices)); // 输出: 5
跳跃游戏
/**
* @param {number[]} nums
* @return {boolean}
*/
var canJump = function(nums) {
let reach = 0;
for (let i = 0; i < nums.length; i++) {
if (i > reach) {
return false;
}
reach = Math.max(reach, i + nums[i]);
if (reach >= nums.length - 1) {
return true;
}
}
return reach >= nums.length - 1;
};
O(1) 时间插入、删除和获取随机元素
class RandomizedSet {
constructor() {
this.elements = [];
this.positions = new Map();
}
insert(val) {
if (this.positions.has(val)) return false;
this.elements.push(val);
this.positions.set(val, this.elements.length - 1);
return true;
}
remove(val) {
if (!this.positions.has(val)) return false;
const index = this.positions.get(val);
// 将要删除的元素与数组的最后一个元素交换
this.positions.set(this.elements[this.elements.length - 1], index);
this.elements[index] = this.elements[this.elements.length - 1];
// 删除映射表中的记录和数组的最后一个元素
this.positions.delete(val);
this.elements.pop();
return true;
}
getRandom() {
const randomIndex = Math.floor(Math.random() * this.elements.length);
return this.elements[randomIndex];
}
}
除自身以外数组的乘积
分发糖果
const guo = (arr) => {
let tangguo = arr.length;
for (let i = 1; i < arr.length; i++) {
if (arr[i] !== arr[i - 1]) {
tangguo += 1;
}
}
return tangguo;
};
console.log('-----guo([1, 1, 42, 33, 4]);', guo([1, 1, 42, 33, 4]));
罗马数字转整数
function romanToInt(s) {
const romanMap = {
I: 1,
V: 5,
X: 10,
L: 50,
C: 100,
D: 500,
M: 1000
};
let result = 0;
for (let i = 0; i < s.length; i++) {
if (romanMap[s[i]] < romanMap[s[i + 1]]) {
result -= romanMap[s[i]];
} else {
result += romanMap[s[i]];
}
}
return result;
}
整数转罗马数字
function intToRoman(num) {
const romanNums = [
{ value: 1000, symbol: 'M' },
{ value: 900, symbol: 'CM' },
{ value: 500, symbol: 'D' },
{ value: 400, symbol: 'CD' },
{ value: 100, symbol: 'C' },
{ value: 90, symbol: 'XC' },
{ value: 50, symbol: 'L' },
{ value: 40, symbol: 'XL' },
{ value: 10, symbol: 'X' },
{ value: 9, symbol: 'IX' },
{ value: 5, symbol: 'V' },
{ value: 4, symbol: 'IV' },
{ value: 1, symbol: 'I' },
];
let result = '';
for (let i = 0; i < romanNums.length; i++) {
while (num >= romanNums[i].value) {
result += romanNums[i].symbol;
num -= romanNums[i].value;
}
}
return result;
}
最后一个单词的长度
function getLastWordLength(str) {
const words = str.split(' ');
const lastWord = words[words.length - 1];
return lastWord ? lastWord.length : 0;
}
// 示例使用
const str = "Hello World";
console.log(getLastWordLength(str)); // 输出: 5
最长公共前缀
function longestCommonPrefix(strs) {
if (strs.length === 0) return "";
let prefix = strs[0];
for (let i = 1; i < strs.length; i++) {
prefix = commonPrefix(prefix, strs[i]);
if (prefix === "") {
return "";
}
}
return prefix;
}
function commonPrefix(str1, str2) {
let min = Math.min(str1.length, str2.length);
for (let i = 0; i < min; i++) {
if (str1[i] !== str2[i]) {
return str1.substring(0, i);
}
}
return str1.substring(0, min);
}
反转字符串中的单词
function reverseWordsInString(str) {
return str.split(' ').reverse().join(' ');
}
// 示例使用
const originalString = "Hello World!";
const reversedString = reverseWordsInString(originalString);
console.log(reversedString); // 输出: "World! Hello"