1.判断一个单词是否是回文?

回文是指把相同的词汇或句子,在下文中调换位置或颠倒过来,产生首尾回环的情趣,叫做回文,也叫回环。比如 mamam redivider .

很多人拿到这样的题目非常容易想到用for 将字符串颠倒字母顺序然后匹配就行了。其实重要的考察的就是对于reverse的实现。其实我们可以利用现成的函数,将字符串转换成数组,这个思路很重要,我们可以拥有更多的自由度去进行字符串的一些操作。

function checkPalindrom(str) {  
    return str == str.split('').reverse().join('');
}

2. 去掉一组整型数组重复的值

比如输入: [1,13,24,11,11,14,1,2]
输出: [1,13,24,11,14,2]
需要去掉重复的11 和 1 这两个元素。

let unique = function(arr) {  
  let hashTable = {};
  let data = [];
  for(let i=0,l=arr.length;i<l;i++) {
    if(!hashTable[arr[i]]) {
      hashTable[arr[i]] = true;
      data.push(arr[i]);
    }
  }
  return data

}

3.统计一个字符串出现最多的字母

输入 : afjghdfraaaasdenas

输出 : a
前面出现过去重的算法,这里需要是统计重复次数。

function findMaxDuplicateChar(str) {  
  if(str.length == 1) {
    return str;
  }
  let charObj = {};
  for(let i=0;i<str.length;i++) {
    if(!charObj[str.charAt(i)]) {
      charObj[str.charAt(i)] = 1;
    }else{
      charObj[str.charAt(i)] += 1;
    }
  }
  let maxChar = '',
      maxValue = 1;
  for(var k in charObj) {
    if(charObj[k] >= maxValue) {
      maxChar = k;
      maxValue = charObj[k];
    }
  }
  return maxChar;

}

另一种写法:

function getMaxAndIndex( arr ){
  if(!arr.length) return;
  if(arr.length==1) return 1;
  var h={}, maxnum=0,maxel='';
  for(var i=0;i<arr.length;i++){
    var a=arr[i]
    h[a]==undefined ? h[a]=1 : (h[a]++)
    if(h[a]>maxnum){
      maxnum=h[a]
      maxel=a
    }
  }
  return '出现次数最多的元素为:'+maxel+'出现次数:'+maxnum
}

4.排序算法

冒泡排序

function bubbleSort(arr) {  
    for(let i = 0,l=arr.length;i<l-1;i++) {
        for(let j=0;j<arr.length-1-i;j++) { 
          if(arr[j]>arr[j+1]) {
               let tmp = arr[j]
               arr[j] = arr[j+1]
              arr[j+1] = tmp
            }
        }
    }
    return arr;
}

快速排序

function quickSort(arr) {

    if(arr.length<=1) {
        return arr;
    }
    let leftArr = [];
    let rightArr = [];
    let q = arr[0];
    for(let i = 1,l=arr.length; i<l; i++) {
        if(arr[i]>q) {
            rightArr.push(arr[i]);
        }else{
            leftArr.push(arr[i]);
        }
    }

    return [].concat(quickSort(leftArr),[q],quickSort(rightArr));
}

5.不借助临时变量,进行两个整数的交换

输入 a = 2, b = 4 输出 a = 4, b =2
主要是利用 + - 去进行运算,类似 a = a + ( b - a) 实际上等同于最后 的 a = b;

function swap(a , b) {  
  b = b - a;
  a = a + b;
  b = a - b;
  return [a,b];
}

使用canvas 绘制一个有限度的斐波那契数列的曲线?

前端经典算法题
斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列主要考察递归的调用。我们一般都知道定义

fibo[i] = fibo[i-1]+fibo[i-2];

生成斐波那契数组的方法

function getFibonacci(n) {  
  var fibarr = [];
  var i = 0;
  while(i<n) {
    if(i<=1) {
      fibarr.push(i);
    }else{
      fibarr.push(fibarr[i-1] + fibarr[i-2])
    }
    i++;
  }

  return fibarr;
}

剩余的工作就是利用canvas arc方法进行曲线绘制了

7.出下列正数组的最大差值比如:

输入 [10,5,11,7,8,9]

输出 6

 function getMaxProfit(arr){
    var max=arr[0];
    var min=arr[0];
    var res=0;
    for (var i = 1; i < arr.length; i++) {
        if(arr[i]>max){
            max=arr[i];
        }
        if(arr[i]<min){
            min=arr[i]
        }
        res=max-min;
    }
    return res;
   }

8随机生成指定长度的字符串

比如给定 长度 8 输出 4ldkfg9j

function getMaxStr(n) {
    let str = 'abcdefghijklmnopqrstuvwxyz9876543210';
    var tmp=''
    for(let i=0;i<n;i++){
      tmp+= str.charAt(Math.floor(Math.random()*str.length))
    }
    return tmp
 }

9.实现类似getElementsByClassName 的功能

自己实现一个函数,查找某个DOM节点下面的包含某个class的所有DOM节点?不允许使用原生提供的 getElementsByClassName querySelectorAll 等原生提供DOM查找函数。

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>原生JS实现getElementsByClassName()</title>
<script>
window.onload = function() {
	var oUl = document.getElementById('ull');
 
	function getElementsByClassName(obj,classname){
		var result = [];
		var aEls = document.getElementsByTagName('*');
		for(var i = 0; i<aEls.length; i++){
 
			//查找有多个属性的元素
			var classnames = aEls[i].className.split(' ')
			if(indexOf(classname,classnames)!=-1){
				result.push(aEls[i]);
			}
		}
        return result;
	}
	function indexOf(classname,classnames){
		for(var i = 0; i<classnames.length; i++){
			if(classname==classnames[i]){
				return i;
				break;
			}
		}
		if(i = classnames.length) return -1;
	}
	//alert(indexOf('box',['box1','box']));
	alert(getElementsByClassName(oUl,'box').length);
}
</script>
</head>
<style>
li{
	width:100px;
	height:28px;
	margin-left:20px;
	list-style: none;
	background: gray;
	margin:2px;
}
.box{
	background:orange;
}
.box1{
	background:green;
}
</style>
<body>
	<ul id="ull">
		<li>0</li>
		<li class='box box'>1</li>
        <li>2</li>
        <li class='box1'>3</li>
        <li class='box1'>4</li>
        <li class='box box1'>5</li> 
	</ul>
</body>
</html>

10.获取指定范围内的随机数

当我们需要获取指定范围(min,max)内的整数的时候,下面的代码非常适合。

function getRadomNum(min,max){
return Math.floor(Math.random() * (max - min + 1)) + min;
}

11.随机获取数组中的元素

function getRadomFromArr(arr){
   return arr[Math.floor(Math.random()*arr.length)];
}

12 生成从0到指定值的数字数组

 var arr=[]
 for(var i=1;i<=100;i++){
   arr.push(i)

 }
   console.log(arr)

14 打乱数字数组的顺序

var arr = [1,2,3,4,5,6,7,'a','dsfs',8,9,'v'];
arr.sort(function(){return Math.random()-0.5});

15 对象转换为数组

//注意对象必须是以下格式的才可以通过此方式转化为数组
//获取的DOM集合,以及函数的arguments也可以通过此方式转化为数组
var obj={
0:'qian',
1:'long',
2:'chu',
3:'tian',
length:4
}
var _slice=[].slice;
var objArr=_slice.call(obj);

16. 验证是否为数组

function isArray(obj){
  return Object.prototype.toString.call(obj) === '[object Array]' ;
}

17 获取数组中最大或者最小值

该方法适合一维或者多维数组求最大最小值的情况

function maxAndMin(arr){
	return {
	    max:Math.max.apply(null,arr.join(',').split(',')),
	    min:Math.min.apply(null,arr.join(',').split(','))
	}
}

18 清空数组

//方式一 通过将长度设置为0
var arr=[1,2,3,4,5];
arr.length=0;
 
//方式二 通过splice方法
var arr=[1,2,3,4,5];
arr.splice(0,arr.length);
 
//方式三 通过将空数组 [] 赋值给数组(严格意义来说这只是将ary重新赋值为空数组,之前的数组如果没有引用在指向它将等待垃圾回收。)
var arr=[1,2,3,4,5];
arr=[];

19保留指定小数位

var num =4.345678;
num = num.toFixed(4); // 4.3457 第四位小数位以四舍五入计算

20 找出数组中出现次数最的元素,并给出其出现过的位置

function getMaxAndIndex( arr ){
  var obj = {};
  arr.forEach(function(item,index){
  if(!obj[item]){
      obj[item]= {indexs: [index]}
  }else{
      obj[item]['indexs'].push(index);
  }
  });
  var num=0;//记录出现次数最大值
  var str='';//记录出现次数最多的字符
  var reArr;//返回最大值的位置数组
  for(var attr in obj){
    var temp=obj[attr]['indexs'];
    if(temp.length>num){
        num=temp.length;
        str=attr;
        reArr=temp;
    }
  }
  return {
    maxStr:str,
    indexs:reArr
  }
}

21 查找字符串中的最长公共前缀

示例: 输入: [“flower”,“flow”,“flight”]
输出: “fl”

function getMaxAndIndex( arr ){
  var firstStr = arr[0], result = ''
  if(!arr.length) return result
  for(let i=0;i<firstStr.length;i++){
      for(let j=1;j<arr.length;j++){
        if(firstStr[i]!=arr[j][i]){
          return result
        }
        
      }
      result += firstStr[i]
  }
  return result
}

相关文章:

  • 2021-12-01
  • 2020-04-13
  • 2021-11-03
  • 2021-08-07
  • 2021-12-28
  • 2022-01-26
  • 2022-01-31
  • 2022-12-23
猜你喜欢
  • 2021-08-14
  • 2021-12-18
  • 2021-06-15
  • 2021-11-30
  • 2022-12-23
  • 2022-01-17
相关资源
相似解决方案