小红书整理

发布时间 2023-12-16 12:58:05作者: 自私的人

小红书

1、旋转数组 [经典题目][二分查找]
2、快速排序 [经典题目][十大排序算法]

class Solution:
    def quickSort(self, arr):
        def partition(arr, left, right):
            low, high = left, right
            key = arr[left]
            while left < right:
                # 从右边找一个小的
                while left < right and key <= arr[right]:            # 注意<=,否则可能出现重复数字不停循环。
                    right -= 1
                arr[left] = arr[right]
                # 从左边找一个大的
                while left < right and key >= arr[left]:
                    left += 1
                arr[right] = arr[left]
                
            # key插入left位置
            arr[left] = key
            partition(arr, low, left -1)
            partition(arr, left+1, high)
            
            return arr
        left, right = 0, len(arr)
        return partition(arr, left, right)
        
lists = [2,1,0,4,8,1,0,5,4,1,3]
s = Solution()
s.quickSort(lists)

3、编辑距离 [经典题目][动态规划]
4、二叉树的前序遍历 [二叉树][1]
5、平衡二叉树[经典题目] [二叉树][1]
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树
6、盛最多水的容器题解
给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i, ai)。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。(多次考)
7、double类型的数组,返回元素乘积最大的子序列的乘积值 [最大子序列?没做过]题解??没python
8、乱序数组寻找逆序对,排序好的二维数组寻找target [旋转数组?二分查找?]
9、寻找最长不重复子串 不重复子串
重复子串
10、最长回文字符串 [经典题][动态规划][已做]
11/给定一个字符串 如果相邻相同元素大于等于4就消掉,11122233332221344。输出是344 [好像见过]
12/二分查找 [具体是啥题目?]
13、用算法求圆周率(估算圆周率) https://www.jb51.net/python/290936z14.htm [估算圆周率]

# 1.割圆法
'''
编程实现割圆法计算圆周率,并输出分割不同次数时边数、圆周率值以及计算所得圆周率值与math库中的圆周率值的偏差。
'''
import math
def cutting_circle(n):      # n为分割次数
    """接收表示分割次数的整数n为参数,计算分割n次时正多边形的边数和圆周率值,返回边数和圆周率值"""
    side_length = 1  # 初始边长
    edges = 6  # 初始边数
    #######################Begin############################
    # 补充你的代码
    def length(x):
        h = math.sqrt(1-(x /2)**2)
        return math.sqrt((x /2)**2 + (1-h)**2)
    for i in range(n):
        side_length = length(side_length)
        edges *=2
        pi = side_length*edges/2
    ########################End###########################
    return edges, pi
if __name__ == '__main__':
    times = int(input())          # 割圆次数
    edges, pi =cutting_circle(times) #调用函数返回值
    #######################Begin############################
    # 补充你的代码
    print(f'分割{times}次,边数为{edges},圆周率为{pi:.6f}')
    print(f'math库中的圆周率常量值为{math.pi:.6f}')                               # 圆周率
    ########################End###########################

14、无序数组找只出现一次的元素 [位操作]
15/数组里找一个位置,使左边的数比右边都小, [题目没有太清晰]
[d]16/输出数组元素的组合:输出数组[1,2,3,5,6,8,9]的全部组合结果,数组元素不重复。比如给定1,2,3三个元素,组合结果为:[123,1,2,3,12,23,13,],空集合算一种组合情况。123,321属于一种,不考虑顺序。 [回溯?排列组合]
[d]17/最长递增子序列,要求O(nlogn)的复杂度。 [动态规划][二分查找][已做]
[d]18/链表排序,要求O(nlogn)的复杂度。[链表]
19/给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。题解
20/"Lonely pixel 孤独像素"大概就是一个矩阵找到一个元素 和它所在的行和列其他元素都不同
21/最大乘积数组
22/合并数组
[d]23/翻转链表[CSDN链表]
[d]24/最大子序列的和,未要求连续, [动态规划最大连续子序和][未做]
[d]25/矩阵求秩 求卷积输出大小 贝叶斯公式
26/给个随机数rand,p的概率生成0,1-p生成1。要求等概率生成1-n任意数
[d]27/旋转数组查找特定值 [二分查找][已做]
[d]28/二叉树最大路径和,leetcode第124 [二叉树][1]
[d]29/斐波纳切数列 [动态规划][已做]
[d]30/组合总数,leetcode 40原题。 回溯/未做
31/麻将速排 [没懂题]
32/无限大五子棋,可以四个方向走,有一些障碍物,但是给定的路径肯定没有,你需要判断这条路径是否是个最短路径 [没懂题,无限大五子棋,最短路径?] https://blog.csdn.net/asad21654864/article/details/130530436 类似
[d]33/X的n次幂,时间复杂度 pow(n), 二分法实现O(logN)的时间复杂度 https://blog.csdn.net/q339179198/article/details/123560095
[d]34/给定长度为14的整型数组,判断是否胡牌2 + 3*4 dd + (abc or aaa) * 4 https://blog.csdn.net/weixin_41888257/article/details/107423869
范围 1~9之间代表数字1~9
形如 111 222 333 456 77 返回True
形如 111 223 345 67 999 返回True
形如 111 222 333 457 99 返回False
35/实现keyset类,包含key,value,包含两类操作,add,pop。
[d]36/kmeans聚类算法 https://blog.csdn.net/qq_43741312/article/details/97128745