LeetCode初级算法入门js

希望自己能早点刷完吧,太懒了

一、 数组

1. 删除排序数组中的重复项

已知是排序数组,只要判断前后两个值,如果一致,就删除。

/**
 * @param {number[]} digits
 * @return {number[]}
 */
var plusOne = function(digits) {
     var i;
     for(i=digits.length-1; i>=0; i--) {
         if(digits[i]!=9) {
             digits[i]++;
             return digits
         } else {
             digits[i] =0
         }
     }
     digits.unshift(1)
     return digits
};

2. 买卖股票的最佳时机 II

var maxProfit = function(prices) {
    if(prices==null || prices.length==0) return 0;
    var profit =0;
    for(var i= 1; i< prices.length; i++) {
        if(prices[i]>prices[i-1]) {
            profit += (prices[i]-prices[i-1])
        }
        //写这里的时候,注意数组越界,不能犯这种低级的错误,zz啊
    }
    return profit;
};

3. 旋转数组

var rotate = function(nums, k) {
      let l = nums.length;
      k %= l
      nums.unshift(...nums.splice(nums.length-k, k));
      return nums;
};

4. 存在重复元素

1>. 简单粗暴实现,时间消耗大
var containsDuplicate = function(nums) {
    if(nums.length <= 1) {
        return false
    }
    for(var i =0;i<nums.length; i++) {
        for(var j= i+1; j<nums.length;j++) {
            if(nums[i] == nums[j]) {
                return true
            }
            
        }
    }
   return false
};
2>.利用sort排序,再比较前后值
var containsDuplicate = function(nums) {
   var arr = nums.sort()
   for(var i =0;i<nums.length; i++) {
       if(nums[i] ==nums[i+1]) {
           return true
       }
   }
   return false
};
3.> 利用es6中set数据结构,set里面的数据是唯一的去重
var containsDuplicate = function(nums) {
   var arr= [...new Set(nums)];
   return arr.length != nums.length
};

5. 只出现一次的数字

1>.
var singleNumber = function(nums) {
  var arr = nums.sort();
  for(var i =0; i<nums.length;i++) {
      if(nums[i] ==nums[i+1]) {
         arr.splice(i, 2)
         i= i-2
      }
  }
  return arr
};
2>.js异或运算符^ 相同为假0,相异为真1
a^a = 0
a^0 = a
a^a^b = a^b^a = b

var singLeNumber = function(nums) {
   var arr = 0;
   for(var i=0; i<nums.length; i++) {
     arr ^= arr[i]
   } 
   return arr
}

6. 两个数组的交集(测试没问题,leetcode就是通不过)

写了两种方式  就先这样吧
 // function uq(arr1, arr2) {
            let    arr1 = [1,2,2,1]
            let    arr2 = [2,2]
            let intersection = Array.from(new Set(arr1))
            let intersection2 = Array.from(new Set(arr2))
            // let a = []
            // for (let i = 0; i < intersection.length; i++) {
            //     for (let j = 0; j < intersection2.length; j++) {
            //         console.log(intersection[i], intersection2[j])
            //         if (intersection[i] == intersection2[j]) {
            //             a.push(intersection[i])
            //         }
            //     }
            // }
            // console.log(a)
            // return a
            var a = intersection.filter(item => { return intersection2.indexOf(item) != (-1) })
            console.log(a)
            // return a;
        // }

        // uq([1, 2, 2, 1], [2, 2])

7. 加1

/**
 * @param {number[]} digits
 * @return {number[]}
 */
var plusOne = function(digits) {
    var arr = []
    arr.push(digits.splice(-1) +1 )
    return arr.sort()
};

8. 移动零

9. 两数之和

var twoSum = function(nums, target) {
   var arr = [];
   for(var i = 0; i<nums.length; i++) {
       for(var j= i+1; j< nums.length; j++) {
           if (nums[i] + nums[j] == target) {
               arr.push(i, j)
                 return arr
           }
       }
   }
 
};

10. 有效的数独

在这里插入代码片

11. 旋转图像

在这里插入代码片

二、字符串

1. 反转字符串

/**
 * @param {character[]} s
 * @return {void} Do not return anything, modify s in-place instead.
 */
var reverseString = function(s) {
    s.reverse()
    return s
};

2. 整数反转

/**
 * @param {number} x
 * @return {number}
 */
/**
 * unshift添加数组头部一项
 * shift删除数组头部一项
 * unpop添加数组最后一项
 * pop删除数组最后一项
 * .toString.split('')把数字对象转为以''切割的数组
 * parseInt 转为整数
 * jion数组转为字符串
*/
 var reverse = function(x) {
   if(x == 0) {
       return 0
   }
   var arr = x.toString().split('');
   var num, res
   if(arr[0]>=0 && arr[0]<=9) { 
       num = parseInt(arr.reverse().join(''))
   }
   if(arr[0] === '-') {
     res = arr.splice(1).reverse();
     res.unshift('-')
     num = parseInt(res.join(''))
   }
   if(num > 2147483647 || num < -2147483648){
    num = 0;
   }
   return num
};

3. 字符串中的第一个唯一字符

/**
 * @param {string}
 * @return {number}
 */
 /**
 *indeOf返回字符串第一次出现的位置
 *lastIndexOf返回字符串最后一次出现的位置
 *这里注意长度不用减1了,注意越界
*/
var firstUniqChar = function(s) {
  for (let i = 0;i < s.length;i++) {
    if (s.indexOf(s[i])===s.lastIndexOf(s[i])) {
      return i
    }
  }
  return -1
};

4. 有效的字母异位词

5. 验证回文串

6. 字符串转换整数 (atoi)

7. 实现 strStr()

8. 外观数列

9. 最长公共前缀

三、链表

1. 删除链表中的节点

2. 删除链表的倒数第N个节点

3.反转链表

4. 合并两个有序链表

5. 回文链表

6. 环形链表

四、树

1.二叉树的最大深度

2.验证二叉搜索树

3. 对称二叉树

4. 二叉树的层序遍历

5.将有序数组转换为二叉搜索树

五、排序和搜索

1.合并两个有序数组

/**
 * @param {number[]} nums1
 * @param {number} m
 * @param {number[]} nums2
 * @param {number} n
 * @return {void} Do not return anything, modify nums1 in-place instead.
 */
var merge = function(nums1, m, nums2, n) {
    nums1.splice(m, n, ...nums2)
    nums1.sort((a, b) => a-b)
};

2.第一个错误的版本

六、动态规划

1. 爬楼梯

2. 买卖股票的最佳时机

3.最大子序和

4. 打家劫舍

七、设计问题

1.打乱数组

2. 最小栈

八、数学

1.Fizz Buzz

2.计数质数

3. 3的幂

4. 罗马数字转整数

九、其他

1.位1的个位

2.汉明距离

3. 颠倒二进制位

4. 杨辉三角

5.有效的括号

6.缺失数字

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值