1.字符串反转 “123abc” -->“cba321”
var str = "123abc";
console.log(str.split("").reverse().join(""));
split--分割单个的 join("")--把他变成字符串
先使用split将字符串转成数组,然后使用数组的reverse方法倒置,最后使用join将数组变成字符串
2.在有序的数组里找出指定的值,返回该值在数组中的下标(二分查找)
预热1.
var arr = [1,3,5,7,9,10,12,14,15];
function getIndex(arr,val){
for(var i=0;i<arr.length;i++){
if(arr[i] == val)
{
return i;
}
}
}
console.log(getIndex(arr,10));
2.
var arr = [1,3,5,7,9,10,11,12,14,15];
function getIndex(arr,val){ ---findIndex :es6内容为true自动返回下标
return arr.findIndex(function(value){
return value == val;
})
}
console.log(getIndex(arr,5));
真正的二分查找 ---效率高但是前提是必须是有序的数组
var arr = [1, 2, 3, 6, 4, 7, 8, 9];
function getIndex(arr, value) {
var start = 0; //开始位置
var end = arr.length - 1; //结束位置
while (end >= start) {
var middle = parseInt((start + end) / 2); //每次计算中间元素,利用中间元素跟需要的值比较
if (arr[middle] > value) { //只改变end start的值不改变数组
end = middle - 1;
} else if (arr[middle] < value) {
start = middle + 1;
} else {
return middle; //找到之后返回
}
}
return -1; //没找到返回-1
}
console.log(getIndex(arr, 2));
3.判断数组是否为对称数组 abccba
// var arr1 = ["a", "b", "c", "d", "c", "b", "a"];
// var arr2 = ["a", "b", "c", "c", "b", "a"];
// var arr3 = ["a", "b", "c", "a", "b", "c"];
// function fn(arr) { //声明一个新数组然后逆序赋值,最后两个数组比较
// var arr1 = [];
// for (var i = arr.length - 1; i >= 0; i--) {
// arr1.push(arr[i]);
// }
// for (var i = 0; i < arr.length; i++) {
// if (arr[i] != arr1[i]) {
// return false;
// }
// }
// return true;
// }
// console.log(fn(arr1), fn(arr2), fn(arr3));
// function fn(arr) {
// var start = 0;
// var end = arr.length - 1;
// while (start < end) {
// if (arr[start] != arr[end]) {
// return false;
// }
// start++;
// end--;
// }
// return true;
// }
// console.log(fn(arr1), fn(arr2), fn(arr3));
4.查询字符串首次出现的位置
// var arr = "abccbaxzabd";
// var arr1 = "abd";
// // console.log(arr.indexOf(arr1));//采用indexOf方法
// function getIndex(arr, arr1) {
// var start = 0;
// var end = arr.length - arr1.length;
// while (start <= end) {
// if (arr.slice(start, arr1.length + start) === arr1) { //
// return start;
// }
// start++;
// }
// return -1;
// }
// console.log(getIndex(arr, arr1));
5.计算数组中,最大连续增长子序列的长度 -->看连续的值最大长度是几
var arr = [1, 2, 3, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 6, 7];
function getMaxLength(arr) {
var len = 0,
num = 0;
for (var i = 0; i <= arr.length; i++) { //i<=arr.length 等于的话最后一个元素会跟他的后一个(没有值)的比较这样就进else循环了,没有等于号进不了else循环,最后的最长的话就记录不上
if (arr[i] > arr[i - 1]) {
num++;
} else {
len = num > len ? num : len;
num = 1; //因为刚开始arr[0]是在跟arr[-1]比,为了避免这样num从1开始
}
}
return len;
}
console.log(getMaxLength(arr));