theme: github
16. 最接近的三数之和
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var threeSumClosest = function(nums, target) {
//定义
let L,R,res=Infinity,ans
//排序
nums.sort((a,b)=>a-b)
//比较复制
for(let i=0;i<nums.length;i++){
L=i+1
R=nums.length-1
while(L<R){
let sum=nums[i]+nums[L]+nums[R]
if(sum<target) L++
else R--
if(Math.abs(sum-target)<res){
ans=sum
res= Math.abs(sum-target)
}
}
}
//返回
return ans
};
75. 颜色分类
冒泡排序
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var sortColors = function(nums) {
for(let i=0;i<nums.length;i++){
for(let j=0;j<nums.length-i-1;j++){
if(nums[j]>nums[j+1]){
let temp=nums[j]
nums[j]=nums[j+1]
nums[j+1]=temp
}
}
}
return nums
};
344. 反转字符串
简单题,重拳出击,一头一尾,遍历,交换指针所指的值
/**
* @param {character[]} s
* @return {void} Do not return anything, modify s in-place instead.
*/
var reverseString = function(s) {
const len=s.length
let l=0,r=len-1
while(l<r){
let temp=s[l]
s[l]=s[r]
s[r]=temp
l++
r--
}
return s
};
925. 长按键入
return i===n:
1.比较后无论name和typed谁有剩余,都为false
2.都没有剩余且在前面的比较中没有返回false则返回true
/**
* @param {string} name
* @param {string} typed
* @return {boolean}
*/
var isLongPressedName = function(name, typed) {
const m=name.length,n=typed.length
let i=0,j=0
while(j<n){
if(name[i]===typed[j]){
i++
j++
}else if(typed[j]===typed[j-1]){
j++
}else return false
}
return i===m
}
总结:
1.目的:减少时间复杂度,在遍历时尽量通过条件限制来减少时间复
2.方法:设置三个指针,一个指针大循环,按照次序递增,剩下的两个指针分别指在两端