一些基础的算法

1.判断回文数

let num=12345654321
      let nums=123456
      function palindrome(num){
        let arr=(num+'').split("")
        let num1=arr.reverse().join("")
        if(num1==num){
          console.log("是回文数");
        }else{
          console.log("不是回文数");
        }
      }
  palindrome(num)
  palindrome(nums)
复制代码

在这里我用的方法是字符串切割成数组(split)方法,然后运用了数组的方法倒序(reverse),最后用了数组转字符串的方法(join),然后判断一下新获取到的字符串是否等于传进来的字符串,在这里第一个调用结果会在控制台打印——是回文数,第二个调用打印的是——不是回文数。

2.查找字符串中出现最多的字符

 let str = "aaassffffddd";
   function findMaxDuplicateChar(str) {
    var cnt = {}, // 用来记录所有的字符的出现频次
      c = ""; // 用来记录最大频次的字符
    for (var i = 0; i < str.length; i++) {
      var ci = str[i];
      if (!cnt[ci]) {
        cnt[ci] = 1;
      } else {
        cnt[ci]++;
      }
      if (c == "" || cnt[ci] > cnt[c]) {
        c = ci;
      }
    }
    console.log(cnt);
    return c;
   }
复制代码

在这里我是先循环了字符串每一个字符,在判断里边!cnt[ci]是判断的如果我这个cnt对象里边没有ci这个字符的时候自动存一个进去并且初始值为1,如果有这个字符了就在他的基础上加1,然后再判断如果c为空的时候c就为当前字符,如果cnt[ci]>cnt[c]也就是如果ci这个字符出现的次数大于c字符出现的次数就给c重新赋值为ci,c就是出现次数最多的字符了。

3.链表的反转

/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var reverseList = function(head) {
    let s=null;
    let n=head;
    // 1 2 3
    while(n){
        // 2 3 null
        let next=n.next
        // 1->null 2->1 3->2
        n.next=s
        // 1 2 3
        s=n
        // 2 3 null
        n=next
    }
     return s

};
复制代码

这道题是力扣题库里边的一道算法题,比如传入的链表是{val:1,next:{val:2,next:{val:3,next:null}}}这个链表通过head传入,把head的值给n然后循环n如果n存在则一直循环如果是null,则停止循环。

第一次传入的是n为1 声明一个next,next的值为当前值的next也就是2 当前值的前边值就为null 声明的上一次的值为当前值也就是n也就是1 当前的这个n等于下一个值也就是next也就是2 然后走第二次循环

第二次传入的是n为2 声明一个next,next的值为当前值的next也就是3 当前值的前边值就为1(这个地方上次循环的时候重新复制了) 声明的上一次的值为当前值也就是n也就是2 当前的这个n等于下一个值也就是next也就是3 然后走第三次循环

第三次传入的是n为3 声明一个next,next的值为当前值的next也就是null 当前值的前边值就为2(这个地方上次循环的时候重新复制了) 声明的上一次的值为当前值也就是n也就是3 当前的这个n等于下一个值也就是next也就是null 因为是null所以循环结束

s现在就等于3所以return s 就是反转后的链表

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享