手撕算法(定制整理版2)

最长无重复子字符串

python 复制代码
class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        if not s:
            return 0
        max_len = 0
        tp = []
        for a in s:
            while a in tp:
                del tp[0]
            tp.append(a)
            if len(tp) > max_len:
                max_len = len(tp)
        return max_len

# ACM模式输入输出处理
if __name__ == "__main__":
    import sys
    for line in sys.stdin:
        s = line.strip()
        sol = Solution()
        print(sol.lengthOfLongestSubstring(s))

把数组排成最小数,最大数,数组中的数组合出最大的数字

python 复制代码
class Solution(object):
    def largestNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: str
        """
        def compare(x, y):
            xy = str(x) + str(y)
            yx = str(y) + str(x)
            return (xy > yx) - (xy < yx)  # 返回 -1, 0, 1
        
        nums.sort(cmp=compare)
        if not nums or nums[0] == 0:
            return "0"
        return ''.join(map(str, nums))

对称的二叉树

python 复制代码
class Solution(object):
    def isSymmetric(self, root):
        """
        :type root: Optional[TreeNode]
        :rtype: bool
        """
        if not root:
            return True
        def dfs(left, right):
            if not (left or right):
                return True
            if not (left and right):
                return False
            if left.val != right.val:
                return False
            return dfs(left.left, right.right) and dfs(left.right, right.left)
        return dfs(root.left, root.right)

回文数

python 复制代码
class Solution(object):
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        if x < 0:
            return False
        ans = 0
        prior = x
        while x > 0:
            temp = x % 10
            ans = ans * 10 + temp
            x //= 10
        return ans == prior

# ACM模式输入输出处理
if __name__ == "__main__":
    import sys
    for line in sys.stdin:
        # 处理输入:假设每行一个整数
        x = int(line.strip())
        sol = Solution()
        print(sol.isPalindrome(x))

最长回文子串

python 复制代码
class Solution(object):
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        if len(s) < 2:
            return s
            
        res = ""
        for i in range(len(s)):
            # 奇数长度回文
            l, r = i, i
            while l >= 0 and r < len(s) and s[l] == s[r]:
                if r - l + 1 > len(res):
                    res = s[l:r+1]
                l -= 1
                r += 1
            
            # 偶数长度回文
            l, r = i, i+1
            while l >= 0 and r < len(s) and s[l] == s[r]:
                if r - l + 1 > len(res):
                    res = s[l:r+1]
                l -= 1
                r += 1
                
        return res

# ACM模式输入输出处理
if __name__ == "__main__":
    import sys
    for line in sys.stdin:
        s = line.strip()
        sol = Solution()
        print(sol.longestPalindrome(s))

子字符串在原字符串中出现的次数

python 复制代码
def count_substring(string, sub_string):
    """
    :type string: str
    :type sub_string: str
    :rtype: int
    """
    count = 0
    len_sub = len(sub_string)
    len_str = len(string)
    
    for i in xrange(len_str - len_sub + 1):
        if string[i:i+len_sub] == sub_string:
            count += 1
    return count

合并区间

python 复制代码
class Solution(object):
    def merge(self, intervals):
        """
        :type intervals: List[List[int]]
        :rtype: List[List[int]]
        """
        intervals.sort(key=lambda x: x[0])

        merged= []

        for interval in intervals:
            if not merged or merged[-1][1] <interval[0]:
                merged.append(interval)
            else:
                merged[-1][1] = max(merged[-1][1],interval[1])
        
        return merged

合并两个有序链表

python 复制代码
class Solution(object):
    def mergeTwoLists(self, list1, list2):
        """
        :type list1: Optional[ListNode]
        :type list2: Optional[ListNode]
        :rtype: Optional[ListNode]
        """
        dummy = ListNode(0)
        cur = dummy
        while list1 and list2:
            if list1.val < list2.val:
                cur.next = list1
                list1 = list1.next
            else:
                cur.next = list2
                list2 = list2.next
            cur = cur.next
        cur.next = list1 if list1 else list2
        return dummy.next

反转链表

python 复制代码
class Solution(object):
    def reverseList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        cur = head
        pre = None
        while cur is not None:
            temp = cur.next
            cur.next = pre
            pre = cur
            cur = temp
        return pre

数组找出乘积为n的两个数

写个函数来校验两个二叉树是否相同,要结构和值都相同

数组中出现最多的数字

python 复制代码
def find_most_frequent(nums):
    """
    :type nums: List[int]
    :rtype: int
    """
    if not nums:
        return None
    
    count_dict = {}
    max_count = 0
    result = nums[0]
    
    for num in nums:
        if num in count_dict:
            count_dict[num] += 1
        else:
            count_dict[num] = 1
            
        if count_dict[num] > max_count:
            max_count = count_dict[num]
            result = num
        elif count_dict[num] == max_count:
            # 如果出现次数相同,返回数值较小的
            result = min(result, num)
            
    return result

滑动窗口

++抖音电商测开++

相关推荐
June`7 分钟前
专题四:综合练习( 找出所有子集的异或总和再求和)
c++·算法·深度优先·剪枝
大白的编程日记.11 分钟前
【Linux学习笔记】理解一切皆文件实现原理和文件缓冲区
linux·笔记·学习
孞㐑¥12 分钟前
Linux之进程控制
linux·开发语言·c++·经验分享·笔记
Magnum Lehar19 分钟前
3d游戏引擎的Utilities模块实现下
c++·算法·游戏引擎
Alessio Micheli30 分钟前
奇怪的公式
笔记·线性代数
JANYI201834 分钟前
C语言易混淆知识点详解
java·c语言·算法
愚润求学36 分钟前
【Linux】简单设计libc库
linux·运维·开发语言·c++·笔记
chennalC#c.h.JA Ptho1 小时前
Bodhi linux 系统详解
linux·经验分享·笔记·系统架构·系统安全
zhuziheniaoer1 小时前
rust-candle学习笔记11-实现一个简单的自注意力
笔记·学习·自然语言处理·rust
绒绒毛毛雨1 小时前
广告推荐算法入门 day1 --项目选型
算法·推荐算法