JavaScript版leetcode源码(持续更新)小白第一次进行刷题

、、第一题
 * @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另一个数组

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值