一、找出数组中重复的数字
在一个长度为 n 的数组 nums 里的所有数字都在 0 ~ n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
function findRepeatNumber(nums) {
let len = nums.length
for(let i = 0; i < len; i++) {
if(nums.indexOf(nums[i], i + 1) != -1) {
return nums[i]
}
}
}
二、两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。
我的答案
function twoSum(nums, target) {
let len = nums.length
for(let i = 0; i < len; i++) {
for(let j = i + 1; j < len; j++) {
if(nums[i] + nums[j] == target) {
return [i, j]
}
}
}
}
其他人的答案(很巧妙),反向思维
for (let i = 0; i < nums.length; i++) {
let index = nums.indexOf(target - nums[i], i + 1)
if (index != -1) {
return [i, index]
}
}
三、移除元素
给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度(需要改变原数组)。
我的答案:i–,防止数组删除后跳级
function removeElement (nums, val) {
for(let i = 0; i < nums.length; i++) {
if(nums[i] === val) {
nums.splice(i, 1)
i--
}
}
return nums.length
}
其他人的答案(很巧妙):nums.splice(0)执行后,nums就变成了一个空数组[]
function removeElement(nums, val) {
return nums.push(...nums.splice(0).filter(x => x != val))
}
以上试题来自 蓝桥杯官网