TypeScript LeetCode 简单题解

1. 两数之和 https://leetcode-cn.com/problems/two-sum/

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标

function twoSum(nums: number[], target: number): number[] {
    let hashmap = new Map();
    hashmap.set(nums[0], 0);
    for (let i = 1; i < nums.length; i++) {
        let needNum = target - nums[i];
        if (hashmap.get(needNum) != null) {
            return [hashmap.get(needNum), i];
        }
        hashmap.set(nums[i], i);
    }
};

7. 整数反转 https://leetcode-cn.com/problems/reverse-integer/

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

function reverse(x: number): number {
    let rev = 0;
    while (x !== 0) {
        const digit = x % 10;
        x = ~~(x / 10);
        rev = rev * 10 + digit;
        if (rev < Math.pow(-2, 31) || rev > Math.pow(2, 31) - 1) {
            return 0;
        }
    }
    return rev;
};

53. 最大子序和 https://leetcode-cn.com/problems/maximum-subarray/

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

function maxSubArray(nums: number[]): number {
    if (nums.length == 1) {
        return nums[0];
    }
    for (let i = 1; i < nums.length; i++) {
        if (nums[i - 1] > 0) {
            nums[i] = nums[i] + nums[i - 1];
        }
    }
    nums.sort((a, b) => a - b);//从小到大排序
    return nums[nums.length - 1];
};

14. 最长公共前缀 https://leetcode-cn.com/problems/longest-common-prefix/submissions/

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""

function longestCommonPrefix(strs: string[]): string {
    let ret = "";
    for (let i = 0; i < strs[0].length; i++) {
        let front = strs[0][i];
        console.log('front=' + front)
        for (let str of strs) {
            console.log(str.indexOf(front))
            if (!str[i] || !(str[i] === front)) {
                return ret;
            }
        }
        ret = ret + front;
    }
    return ret;
};

415. 字符串相加

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。

function addStrings(num1: string, num2: string): string {
    let i = num1.length - 1;
    let j = num2.length - 1;
    let add = 0;
    let retArr = [];
    while (i >= 0 || j >= 0 || add > 0) {
        let x = i >= 0 ? Number(num1[i]) : 0;
        let y = j >= 0 ? Number(num2[j]) : 0;
        let result = x + y + add;
        retArr.push(result % 10);
        add = Math.floor(result / 10);
        i -= 1;
        j -= 1;
    }
    return retArr.reverse().join('');
};

61.给定一个单链表 输出该链表右移K位的新链表

class ListNode {
    val: number
    next: ListNode | null
    constructor(val?: number, next?: ListNode | null) {
        this.val = (val === undefined ? 0 : val)
        this.next = (next === undefined ? null : next)
    }
}

function rotateRight(head: ListNode | null, k: number): ListNode | null {
    if (k === 0 || !head || !head.next) {
        return head;
    }
    let n = 1;
    let cur = head;
    while (cur.next) {
        cur = cur.next;
        n++;
    }

    let add = n - k % n;
    if (add === n) {
        return head;
    }

    cur.next = head;
    while (add) {
        cur = cur.next;
        add--;
    }

    const ret = cur.next;
    cur.next = null;
    return ret;
};

215.给定一个数组 输出数组里第k大的数字

第k大的数 注意要从大到小排序

function findKthLargest(nums: number[], k: number): number {
    nums.sort((a, b) => b - a);
    return nums[k - 1];
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值