JS每日一题
#数组
#两数之和
题目传送门:两数之和 (opens new window)
题意:在数组中挑两个数,使得target等于两数之和,输出两数的坐标。
方法一:
暴力枚举:
点击查看代码
var twoSum = function(nums, target) {
for(var i=0;i<nums.length;i++){
for(var j=i+1;j<nums.length;j++){
if(nums[i]+nums[j]===target){
return [i,j];
}
}
}
return [];
};
方法二:
开一个盒子
将每一个无法与盒子里的数匹配相加得到target的数放到盒子里面;
如果能够匹配,那就直接返回答案就行。
点击查看代码
var twoSum = function(nums, target) {
let box = {};
for(let i = 0;i < nums.length; i++)
{
if( box[ target - nums[i] ] >= 0){
return [box[target-nums[i]],i];
}
else {
box[nums[i]] = i;
}
}
};
方法三:
用Map来进行维护,思路同方法二
点击查看代码
var twoSum = function(nums, target) {
let myMap = new Map();
for(let i=0;i<nums.length;i++)
{
if(myMap.get(target-nums[i])>=0){
return [i,myMap.get(target-nums[i])];
}else{
myMap.set(nums[i],i);
}
}
};
#删除有序数组中的重复项
题目传送门:删除有序数组中的重复项
方法一:
运用splice方法,splice(i,j)表示从第i个位置开始,消去j个元素
点击查看代码
var removeDuplicates = function(nums) {
for(var i=0;i<nums.length;i++)
{
if(nums[i]===nums[i+1]){
nums.splice(i,1);
i--;
}
}
console.log(nums.length);
console.log(nums);
};
方法二:
用双指针来写,fa往后面遍历,ch则表示找到几个不同的。
点击查看代码
// 104ms 46.8MB
var removeDuplicates = function(nums) {
// 第二种方法是使用双指针来写的
for(var fa = 0,ch=0;fa<nums.length;fa++){
if(nums[fa]!==nums[ch]){
ch++;
nums[ch] = nums[fa];
}
}
nums.splice(ch+1,nums.length-ch);
console.log(ch);
console.log(nums);
};