小白学习打卡02

25 篇文章 0 订阅
22 篇文章 0 订阅

这是在力扣的刷题过程的笔记记录;代码部分来自于力扣官方解答

1.有序矩阵

题目描述:

求取某多维数组中第k个元素;此元素为第k个最小元素

解答:

方法一: 直接排序
把多维数组另存为一维数组进行排序

class Solution:      #python3
   def kthsmaller(self, matrix:list[list[]], k:int)->int:
     r=sorted(sum(matrix,[]))
     return r[k-1]  #空间复杂度O(n^2);时间复杂度O(n^2logn)
class Solution{
  public int kthsmaller(int[][] matrix,int k){
  int rows=matrix.length,columns=matrix[0].length;//rows为数组的宽度 columns为数组的列数
  int[] sorted= new int[rows * columns]; //重新排序
  int index=0;
  for(int[] row:matrix){  
    for(int num:row){
        sorted[index++]=num;//对每一行的数组元素进行排序
     }
   }
   Arrays.sort(sorted);//重新排序成一维数组
   return sorted[k-1];//返回一维数组中的排序
  }
}//空间复杂度O(n^2);时间复杂度O(n^2logn)

方法二: 二分查找 (ps:看了官方题解有点难,不过相对来说,python3还是认为能理解一些)

class Solution:
    def kthSmallest(self, matrix: List[List[int]], k: int) -> int:
        n = len(matrix)  #定义数组长度

        def check(mid):  #定义函数check 目的检查mid
            i, j = n - 1, 0  
            num = 0
            while i >= 0 and j < n: #当最后一个值的index大于0且第一个值的index小于数组长度时进行循环
                if matrix[i][j] <= mid:
                    num += i + 1 //
                    j += 1 #相当于left+1
                else:
                    i -= 1 #i=i-1 相当于right-1
            return num >= k #返回num大于k

        left, right = matrix[0][0], matrix[-1][-1]
        while left < right:
            mid = (left + right) // 2
            if check(mid):
                right = mid
            else:
                left = mid + 1
        
        return left

2.数组转为二叉树

题目描述:

将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

解答:
class Solution:
  def sortArraytoBST(self,nums:list[int])->TreeNode:
    def exo(left,right):
      if left>right:
        return None
      mid=(left+right)//2    #左
      or mid=(left+right+1)//2 #右
      or mid(left+right+randint(0,1))//2 #随机
     
     root=TreeNode(nums[mid])
     root.left=exo(left,mid-1)
     root.right=exo(mid+1,right)
     return root
   return exo(0,len(nums)-1)

3.跳水板

题目描述:

输入:
shorter = 1
longer = 2
k = 3
输出: {3,4,5,6}

解答:
Class Solution:
 def dividBroad(self, shorter:int,longer:int, k:int)->List[int]:
    if k==0:
     return []
    if shorter==longer:
       return (shorter*k)
     result=[] #一定注意这里是result=[]
     for i in range(k+1): ##??? 
      result.append(shorter*(k-i)+longer*i)
     return result
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值