博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode算法题练习
阅读量:6166 次
发布时间:2019-06-21

本文共 2301 字,大约阅读时间需要 7 分钟。

1、合并并排序两个单链表:

/** * Definition for singly-linked list. * function ListNode(val) { *     this.val = val; *     this.next = null; * } *//** * @param {ListNode} l1 * @param {ListNode} l2 * @return {ListNode} */var mergeTwoLists=function(l1,l2){    var arr=[];    while(l1){        arr.push(new ListNode(l1.val));        l1=l1.next;    }    while(l2){        arr.push(new ListNode(l2.val));        l2=l2.next;    }    if(!arr.length) return null;    arr.sort(function(a,b){        return a.val-b.val;    });    for(var i=0;i

注意将生成新节点,然后将每个节点的值复制,放入数组中,对每个节点统一排序,然后再把指针指向后面的节点即可,最后只需要返回头节点,因为头结点包含后面所有的节点。

2、括号匹配:

题目:

Given a string containing just the characters '('')''{''}''[' and ']', determine if the input string is valid.

The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.

var isValid = function(s) {    var sta=[],    target={        '(':')',        '[':']',        '{':'}'    };    for(var i=0;i

注意要把不匹配的push到数组中,因为每次只跟栈顶的元素比对,为了保证只有相邻的括号才能匹配且通过最后数组长度来判断是否满足要求。

3、找字符串数组最长的公共前缀:

/** * @param {string[]} strs * @return {string} */var longestCommonPrefix = function(strs) {      if (!strs.length) return '';      var len = strs.reduce(function(pre, item) {        return Math.min(pre, item.length);      }, Number.MAX_VALUE);      var ans = '';      for (var i = 0; i < len; i++) {        var a = strs[0][i];        var f = strs.every(function(item) {          return item[i] === a;        });        if (!f) break;        ans += a;      }      return ans;    };

注意数组的reduce方法和every方法的使用,注意every方法返回的是布尔值true or false。

4、输出去重后的数组的长度(不能新建数组):

/** * @param {number[]} nums * @return {number} */var removeDuplicates = function(nums) {  var ans = 0;  for (var i = nums.length; i--; ) {    if (i === nums.length - 1)      ans++;    else if (nums[i] === nums[i + 1])      nums.splice(i, 1);    else       ans++;  }  return ans;};

5、【经典】连续子数组的最大和:

/** * @param {number[]} nums * @return {number} */var maxSubArray = function(nums) {  var maxn = -Number.MAX_VALUE;  var sum = 0;  nums.forEach(function(item, index, array) {    sum += item;    if (sum > maxn)      maxn = sum;    if (sum < 0)      sum = 0;  });  return maxn;};

注意maxn的值可以用来区别数组是否是无效的,当和为负时重新开始计算,还要注意记录最大和,只有当比之前的大的时候才更新maxn。

转载于:https://www.cnblogs.com/wanwanli/p/7514661.html

你可能感兴趣的文章
js中var、let、const的区别
查看>>
简洁优雅地实现夜间模式
查看>>
react学习总结
查看>>
在soapui上踩过的坑
查看>>
MySQL的字符集和字符编码笔记
查看>>
ntpd同步时间
查看>>
Maven编译时跳过Test
查看>>
Spring Boot 整合Spring Security 和Swagger2 遇到的问题小结
查看>>
Apache通过mod_php5支持PHP
查看>>
java学习:jdbc连接示例
查看>>
Silverlight 如何手动打包xap
查看>>
HTTP缓存应用
查看>>
KubeEdge向左,K3S向右
查看>>
DTCC2013:基于网络监听数据库安全审计
查看>>
CCNA考试要点大搜集(二)
查看>>
ajax查询数据库时数据无法更新的问题
查看>>
Kickstart 无人职守安装,终于搞定了。
查看>>
linux开源万岁
查看>>
linux/CentOS6忘记root密码解决办法
查看>>
25个常用的Linux iptables规则
查看>>