zoukankan      html  css  js  c++  java
  • LeetCode1-5题

     

    1.两数之和

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

    你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

    示例:

    给定 nums = [2, 7, 11, 15], target = 9
    
    因为 nums[0] + nums[1] = 2 + 7 = 9
    所以返回 [0, 1]
    class Solution(object):
        def twoSum(self, nums, target):
            """
            :type nums: List[int]
            :type target: int
            :rtype: List[int]
            """
            d = {}
            for i, num in enumerate(nums):
                if target - num in d:
                    return [d[target - num], i]
                d[num] = i

    2.两数相加

    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

    如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

    您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

    示例:

    输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
    输出:7 -> 0 -> 8
    原因:342 + 465 = 807
    class Solution:
        def addTwoNumbers(self, l1, l2):
            """
            :type l1: ListNode
            :type l2: ListNode
            :rtype: ListNode
            """
            node1 = l1
            node2 = l2
            l3 = ListNode(0)
            l3.next = ListNode(0)#[0],[0]的特殊情况
            node3 = l3
            
            sum1 = 0
            coe = 1
            while not node1 is None:
                sum1 += node1.val * coe
                coe *= 10
                node1 = node1.next
            
            sum2 = 0
            coe =1
            while not node2 is None:
                sum2 += node2.val * coe
                coe *= 10
                node2 = node2.next
            
            sum = sum1 + sum2
            
            while sum > 0:
                node3.next = ListNode(sum % 10)
                node3 = node3.next
                sum //= 10
                
            return l3.next  

    3.无重复字符的最长子串

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

    示例 :

    输入: "abcabcbb"
    输出: 3 
    解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
    class Solution:
        def lengthOfLongestSubstring(self, s):
            """
            :type s: str
            :rtype: int
            """
            start = 0
            max_length = 0
            substring = {}
            for i, c in enumerate(s):
                if c in substring and start <= substring[c]:#只有当重复值是在start后面出现时才移动start
                    start = substring[c] + 1#Slding Window的思想
                else:
                    max_length = max(max_length, i - start + 1)
                substring[c] = i
                
            return max_length

     

    4.寻找两个有序数组的中位数

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2

    请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。

    你可以假设 nums1 和 nums2 不会同时为空。

    示例 1:

    nums1 = [1, 3]
    nums2 = [2]
    
    则中位数是 2.0
    class Solution:
        def findMedianSortedArrays(self, nums1, nums2):
            """
            :type nums1: List[int]
            :type nums2: List[int]
            :rtype: float
            """
            nums = sorted(nums1+nums2)
            if len(nums)%2 ==0:
                answer = (nums[int(len(nums)/2-1)]+nums[int(len(nums)/2)])/2
            else:
                answer = nums[int((len(nums)+1)/2)-1]
            return answer

     

    5.最长回文子串

    给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

    示例 1:

    输入: "babad"
    输出: "bab"
    注意: "aba" 也是一个有效答案。
    class Solution(object):
        def longestPalindrome(self, s):
            """
            :type s: str
            :rtype: str
            """
            left = right = 0
            n = len(s)
            for i in range(n - 1):
                if 2 * (n - i) + 1 < right - left + 1:
                    break
                l = r = i
                while l >= 0 and r < n and s[l] == s[r]:
                    l -= 1
                    r += 1
                if r - l - 2 > right - left:
                    left = l + 1
                    right = r - 1
                l = i
                r = i + 1
                while l >= 0 and r < n and s[l] == s[r]:
                    l -= 1
                    r += 1
                if r - l - 2 > right - left:
                    left = l + 1
                    right = r - 1
            return s[left:right + 1]
  • 相关阅读:
    软件工程课程作业(四)--返回一个整数数组中最大子数组的和
    构建之法阅读笔记02
    第三周学习进度
    Delphi 之 编辑框控件(TEdit)
    Delphi 之 标签组件(TLabel组件)
    Delphi 之 第九课 Windows编程
    Delphi 之 第八课 动态数组
    VB API 之 第六课 字体应用三
    VB API 之 第五课 字体之其他函数介绍
    Delphi 之 第七课 字符串操作
  • 原文地址:https://www.cnblogs.com/Estate-47/p/10629943.html
Copyright © 2011-2022 走看看