JavaScript版leetcode源码(持续更新)小白第一次进行刷题
2016-12-01 19:28
190 查看
、、第一题
* @param {number[]} nums * @param {number} target * @return {number[]} */ var twoSum = function(nums, target) { var result=[]; for(var i=0;i<nums.length-1;i++){ for(var j=i+1;j<nums.length;j++){ if(nums[i]+nums[j]==target){ result.push(i); result.push(j); return result; } } } return false; };//第二题
/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } */ /** * @param {ListNode} l1 * @param {ListNode} l2 * @return {ListNode} */ var addTwoNumbers = function(l1, l2) { var sum=l1.val+l2.val; var next1=l1.next; var next2=l2.next; var l3 = new ListNode(sum%10);//初始化l3 var node=l3;//更新node的同时更新l3 sum = Math.floor(sum/10);//进位,如果有的话 while(next1 || next2 || sum!==0){ //next1或者next2为空时补充为0 //当两个都为空且没有进位的时候的时候停止,有进位的话还需要补充一个进位 sum += (next1?next1.val:0)+(next2?next2.val:0); node.next = new ListNode(sum%10); node = node.next; next1 = next1?next1.next:null; next2 = next2?next2.next:null; sum = Math.floor(sum/10); } return l3; };
//第三题
/** * @param {string} s * @return {number} */ var lengthOfLongestSubstring = function(s) { //边界值判断,如果是空串返回0 if(s===''){//js用===进行判断 return 0; } var maxLength=1;//如果不是空,初始最大值就应该是1 var nextChar;//用来判断下一个字符是否可以包含在最大串中 var currentLength=1;//用来记录当前子串的长度,初始为1 for(var i=1;i<s.length;i++){ nextChar=s.substr(i-currentLength,currentLength).indexOf(s[i]); if(nextChar===-1){//目前的最大子串中不包含下一个字符,最大子串加1 currentLength++; }else{//包含下一个字符,从第一个重复字符的下一个位置开始从新判断 currentLength-=nextChar; } if(maxLength<currentLength){ maxLength=currentLength;//更新最大子串长度 } } return maxLength; };【注】:在判断当前字符是否在当前子串中的时候,截取当前最大长度子串一定要使用s.substr(start,length),第一次我使用了s.substring(start,end),来进行截取,两者的参数是不同的,作为一个小白不是很在意这些,越学越明白啊!!!共勉
//第四题
思想:将两个数组合并,之后进行排序,由于js排序默认是字母序,因此需要对排序函数协商排序规则。
排好序之后的合并数组寻找中间数即可
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number}
*/
function NumAscSort(a,b)
{
return a-b;
}
var findMedianSortedArrays = function(nums1, nums2){
var maxLen=nums1.length+nums2.length;
if(nums1.length===0&&nums2.length===0){
return 0;
}
for(var i=0;i<nums2.length;i++){
nums1.push(nums2[i]);
}
nums1.sort(NumAscSort);
if(maxLen%2===1){
return nums1[Math.floor(maxLen/2)];
}else{
//return nums1;
return (nums1[maxLen/2-1]+nums1[maxLen/2])/2;
}
};【注】:不能新建一个数组来存合并后的数组,因为这样空间占用率不符合规则,可以用一个数组来push另一个数组
相关文章推荐
- javascript小白学习指南4--持续更新
- Ubuntu 14.04编译 android源码出现问题搜集(持续更新)
- ( 译、持续更新 ) JavaScript 上分小技巧(四)
- 下载和编译Android源码问题集(持续更新)
- leetcode个人刷题笔记(持续更新)
- LeetCode with C++ and Java and little Scala (持续更新)
- 编写良好javascript,css,html的方法技巧(持续更新……)
- MySQL的源码安装及使用UDFs进行数据自动更新的教程
- javascript部分细节(持续更新)
- javascript易犯错误列表(持续更新...)
- leetcode数据库题集持续更新中
- .Net免费公开课视频+资料+源码+经典牛逼 汇总篇【持续更新】
- JavaScript中常用函数(入门级)(持续更新)
- Leetcode刷题笔记(持续更新...)
- ( 译、持续更新 ) JavaScript 上分小技巧(二)
- 010-Step--- 【20180224 学习】 持续深入玩弄JavaScript(更新)
- IOS开发--待研究源码(持续添加更新)
- faster rcnn源码解析(持续更新中)
- Javascript的一些奇技淫巧 持续更新
- LeetCode || 总结(持续更新)