1.二分法查找
例如:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
输入: nums = [1,3,5,6], target = 3 输出: 1
var searInset = function(nums,target){
let min=0
let max=nums.length-1
while(min<max){
let mid=Math.floor((max+min)/2)
if(nums[mid] === target){
return mid
}else if(nums[mid] < target){
min=min+1
}else{
max=max-1
}
}
return min //如果数组中没有查找到,就返回它应该插入的位置的索引
}
let arr=[1,3,4,5,6]
let arr1=[1,2,3,4,5]
console.log(searInset(arr,2)) //1
console.log(searInset(arr1,3)) //2
2.无重复字符串
splice() 方法用于添加或删除数组中的元素。这种方法会改变原始数组。
语法:array.splice(index,howmany,item1,.....,itemX)
index:必需。规定从何处添加/删除元素。该参数是开始插入和(或)删除的数组元素的下标,必须是数字。
howmany:可选。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
item1, ..., itemX:可选。要添加到数组的新元素
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。
如果没有找到匹配的字符串则返回 -1。
var arr='abcbdea';
var arr1='aba'
function checkString(arg){
let map =[];
var max=0;
for(let i=0;i<arg.length;i++){
let index=map.indexOf(arg[i]);
if(index !=-1){
map.splice(0,index+1)
}
map.push(arg[i]);
max=Math.max(map.length,max)
}
return max;
}
console.log(checkString(arr)) //5
console.log(checkString(arr1)) //2
3.数组扁平化
// 第一种方法 flat()
var arr=[1,[1,2,3],[1,2,[2,3,[4]]]]
// Infinity关键字作为参数时,无论嵌套多少层,都会转化成一维数组
let arr1 = [...new Set(arr.flat(Infinity))] //进行去重操作
console.log(arr1)
// 第二种方法一次性栈方法
function bp(arg){
let result =[]
let stack =[...arg]
while(stack.length !==0){
let val = stack.pop()
if(Array.isArray(val)){
//如果是数组就再次入栈,并展开一层
stack.push(...val)
}else{
result.unshift(val)
}
}
return result
}
console.log(bp(arr))
4.有效括号
function kh(s){
let ss={
'{':'}',
'(':')',
'[':']',
}
let stack=[]
for(let i=0; i<s.length; i++){
if(ss[s[i]]){
stack.push(s[i])
}else if(s[i] !==ss[stack.pop()]){
return false
}
}
return stack.length ===0
}
var bb='[({})]'
console.log(kh(bb)) //true
5.判断是否是回文数
charAt() 方法可返回指定位置的字符。
第一个字符位置为 0, 第二个字符位置为 1,以此类推.
//第一种方法。利用数组的charAt方法
function hw(arr){
if(typeof arr !== 'string')return false;
let i=0;let j=arr.length-1
while(i<j){
if(arr.charAt(i) !==arr.charAt(j))return false;
i++;
j--;
}
return true;
}
console.log(hw('abcd')) //false
console.log(hw('aabbaa')) //true
// 第二种方法利用Api来判断
function hh(arr){
if(typeof arr !=='string')return false;
return arr.split('').reverse().join('') == arr
}
console.log(hh('aabbaa'))
console.log(hh('qwer'))