文章目录
前言
今天是五月集训第一天,希望我和大家能检查这个月完成每日打卡,一个月以后遇见一个不一样的自己
一、找到最接近 0 的数字
1. 题目链接
2.思路
首先应该想到的就是绝对值比较,然后取最小值,用n记录最小值,absn记录绝对值最小值,但是要分两种情况
- 遍历的当前值绝对值小于absn
将当前值及当前值的绝对值记录 - 遍历的当前值等于absn且当前值大于0
记录当前值
3. 代码
- js
function findClosestNumber(nums: number[]): number {
let n = nums[0]
let absn = Math.abs(nums[0])
for (let i = 1; i < nums.length; i++) {
if (Math.abs(nums[i]) < absn) {
n = nums[i]
absn = Math.abs(nums[i])
} else if (Math.abs(nums[i]) === absn && nums[i] > 0) {
n = nums[i]
absn = n
}
}
return n
};
二、找到最接近 0 的数字
1. 题目链接
2.思路
两层遍历比较两次遍历的索引满足(i<j && nums[i] < nums[j]) ,进行比较赋值
3. 代码
- js
function maximumDifference(nums: number[]): number {
let res = -1
for (let i = 0; i < nums.length; i++) {
for (let j = 0; j < nums.length; j++) {
if (i < j && nums[i] < nums[j]) {
res = Math.max(nums[j] - nums[i], res)
}
}
}
return res
};
三、 多个数组求交集
1. 题目链接
2.思路
用map集合记录第一组每个数字出现的次数
3. 代码
- js
function intersection(nums: number[][]) {
let res_list = [], map = {}
for (let i = 0; i < nums[0].length; i++) {
map[nums[0][i]] = nums.length - 1
}
for (let i = 1; i < nums.length; i++) {
for (let item of nums[i]) {
if (map[item]) {
map[item] -= 1
}
}
}
for (let key in map) {
if (!map[key]) res_list.push(key)
}
res_list.sort((a, b) => a - b)
return res_list
};
四、 商品折扣后的最终价格
1. 题目链接
2.思路
拷贝一个新数组,用于存放最终结果,两次循环原数组,当j<=prices[i]更新值
3. 代码
function finalPrices(prices: number[]): number[] {
let res_list: number[] = [...prices]
for (let i = 0; i < prices.length; i++) {
for (let j = i + 1; j < prices.length; j++) {
if (prices[j] <= prices[i]) {
res_list[i] = prices[i] - prices[j]
break
}
}
}
return res_list
};