您的位置:首页 > Web前端 > JavaScript

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 leetcode