每日一练 — 2022.01.13

2024-03-12 02:59
文章标签 每日 13 2022.01

本文主要是介绍每日一练 — 2022.01.13,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一,跳跃游戏 II
    • 1,程序简介
      • 示例:
      • 说明:
    • 2,程序代码
    • 3,运行结果
  • 二,恢复二叉搜索树
    • 1,程序简介
      • 进阶:
      • 示例 1:
      • 示例 2:
      • 提示:
    • 2,程序代码
    • 3,运行结果
  • 三,四数之和
    • 1,程序简介
      • 示例 1:
      • 示例 2:
      • 提示:
    • 2,程序代码
    • 3,运行结果


一,跳跃游戏 II

1,程序简介

  • 给定一个非负整数数组,你最初位于数组的第一个位置。

  • 数组中的每个元素代表你在该位置可以跳跃的最大长度。

  • 你的目标是使用最少的跳跃次数到达数组的最后一个位置。

示例:

  • 输入: [2,3,1,1,4]
  • 输出: 2
  • 解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

说明:

  • 假设你总是可以到达数组的最后一个位置。

2,程序代码

# -*- coding: utf-8 -*-
"""
Created on Thu Jan 13 21:38:07 2022
Function: 跳跃游戏 II
@author: 小梁aixj
"""
class Solution:def jump(self, nums):if len(nums) <= 1:return 0end = 0 + nums[0]start = 0step = 1maxDis = 0 + nums[0]while end < len(nums) - 1:for i in range(start + 1, end + 1):maxDis = max(maxDis, nums[i] + i)start = endend = maxDisstep += 1return step
# %%
s = Solution()
print(s.jump(nums = [2,3,0,1,4]))

3,运行结果

在这里插入图片描述

二,恢复二叉搜索树

1,程序简介

  • 给你二叉搜索树的根节点 root ,该树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。

进阶:

  1. 使用 O(n) 空间复杂度的解法很容易实现。
  2. 你能想出一个只使用常数空间的解决方案吗?

示例 1:

  • 输入:root = [1,3,null,null,2]
  • 输出:[3,1,null,null,2]
  • 解释:3 不能是 1 左孩子,因为 3 > 1 。交换 1 和 3 使二叉搜索树有效。

示例 2:

  • 输入:root = [3,1,4,null,null,2]
  • 输出:[2,1,4,null,null,3]
  • 解释:2 不能在 3 的右子树中,因为 2 < 3 。交换 2 和 3 使二叉搜索树有效。

提示:

  • 树上节点的数目在范围 [2, 1000] 内
  • − 2 31 < = N o d e . v a l < = 2 31 − 1 -2^{31} <= Node.val <= 2^{31} - 1 231<=Node.val<=2311

2,程序代码

# -*- coding: utf-8 -*-
"""
Created on Thu Jan 13 21:38:36 2022
Function: 恢复二叉搜索树
@author: 小梁aixj
"""
import sys
class TreeNode(object):def __init__(self, x):self.val = xself.left = Noneself.right = Nonedef to_list(self, count):queue = []queue.append(self)result = []while len(queue) > 0:if count == 0:breaknode = queue.pop(0)if node is None:result.append('null')else:count -= 1result.append(node.val)queue.append(node.left)queue.append(node.right)return result
class List2Tree(object):def __init__(self, nums: list):self.nums = numsself.queue = []if len(nums) == 1:self.root = TreeNode(self.nums.pop(0))else:a = self.nums.pop(0)b = self.nums.pop(0)c = self.nums.pop(0)self.root = TreeNode(a)if b is not None:self.root.left = TreeNode(b)else:self.root.left = bif c is not None:self.root.right = TreeNode(c)else:self.root.right = cself.queue.append(self.root.left)self.queue.append(self.root.right)def convert(self):while len(self.nums) > 0 and len(self.queue) > 0:node = self.queue.pop(0)if node is not None:num = self.nums.pop(0)if num is not None:node.left = TreeNode(num)else:node.left = numif len(self.nums) > 0:num = self.nums.pop(0)else:num = Noneif num is not None:node.right = TreeNode(num)else:node.right = numself.queue.append(node.left)self.queue.append(node.right)return self.root
class Solution(object):def __init__(self):self.first = self.second = Noneself.pre = TreeNode(-sys.maxsize - 1)def recoverTree(self, root):length = len(root)root = List2Tree(root).convert()self.traverse(root)self.first.val, self.second.val = self.second.val, self.first.valreturn root.to_list(length)def traverse(self, root):if root is None:returnself.traverse(root.left)if self.pre.val >= root.val:if self.first is None:self.first = self.preif self.first is not None:self.second = rootself.pre = rootself.traverse(root.right)
# %%
s = Solution()
print(s.recoverTree(root=[1, 3, None, None, 2]))

3,运行结果

在这里插入图片描述

三,四数之和

1,程序简介

  • 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。

  • 注意:答案中不可以包含重复的四元组。

示例 1:

  • 输入:nums = [1,0,-1,0,-2,2], target = 0
  • 输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]

示例 2:

  • 输入:nums = [], target = 0
  • 输出:[]

提示:

  • 0 < = n u m s . l e n g t h < = 200 0 <= nums.length <= 200 0<=nums.length<=200
  • − 1 0 9 < = n u m s [ i ] < = 1 0 9 -10^9 <= nums[i] <= 10^9 109<=nums[i]<=109
  • − 1 0 9 < = t a r g e t < = 1 0 9 -10^9 <= target <= 10^9 109<=target<=109

2,程序代码

# -*- coding: utf-8 -*-
"""
Created on Thu Jan 13 21:38:56 2022
Function: 四数之和
@author: 小梁aixj
"""
class Solution(object):def fourSum(self, nums, target):""":type nums: List[int]:type target: int:rtype: List[List[int]]"""nums.sort()results = []N = len(nums)i = 0while i < N-3:if i > 0 and nums[i] == nums[i-1]:i += 1continuej = i+1while j < N-2:if j > i+1 and nums[j] == nums[j-1]:j += 1continuek = j+1l = N-1while k < l:if k > j+1 and nums[k] == nums[k-1]:k += 1continuewhile k < l and (target - nums[i] - nums[j] - nums[k] - nums[l]) < 0:l -= 1if k >= l:breakif target == nums[i] + nums[j] + nums[k] + nums[l]:results.append([nums[i],nums[j],nums[k],nums[l]])k += 1j += 1i += 1return results
# %%
s = Solution()
print(s.fourSum(nums = [1,0,-1,0,-2,2], target = 0))

3,运行结果

在这里插入图片描述

这篇关于每日一练 — 2022.01.13的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/799935

相关文章

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

每日一练7:简写单词(含链接)

1.链接 简写单词_牛客题霸_牛客网 2.题目 3.代码1(错误经验) #include <iostream>#include <string>using namespace std;int main() {string s;string ret;int count = 0;while(cin >> s)for(auto a : s){if(count == 0){if( a <=

【每日刷题】Day113

【每日刷题】Day113 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 91. 解码方法 - 力扣(LeetCode) 2. LCR 098. 不同路径 - 力扣(LeetCode) 3. 63. 不同路径 II - 力扣(LeetCode) 1. 91. 解码方法 - 力扣(LeetCode) //思路:动态规划。 cl

13 transition数组的动画使用

划重点 动画:transitiontransition-group :数组动画数组的 添加 / 删除 豆腐粉丝汤 清淡又健康 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><me

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

Chapter 13 普通组件的注册使用

欢迎大家订阅【Vue2+Vue3】入门到实践 专栏,开启你的 Vue 学习之旅! 文章目录 前言一、组件创建二、局部注册三、全局注册 前言 在 Vue.js 中,组件是构建应用程序的基本单元。本章详细讲解了注册和使用 Vue 的普通组件的两种方式:局部注册和全局注册。 本篇文章参考黑马程序员 一、组件创建 ①定义 Vue 组件是一种具有特定功能的 Vue 实

VMware Fusion Pro 13 Mac版虚拟机 安装Win11系统教程

Mac分享吧 文章目录 Win11安装完成,软件打开效果一、VMware安装Windows11虚拟机1️⃣:准备镜像2️⃣:创建虚拟机3️⃣:虚拟机设置4️⃣:安装虚拟机5️⃣:解决连不上网问题 安装完成!!! Win11安装完成,软件打开效果 一、VMware安装Windows11虚拟机 首先确保自己的mac开启了网络共享。不然虚拟机连不上👀的 1️⃣:准备镜像

华为 HCIP-Datacom H12-821 题库 (13)

有需要题库的可以看主页置顶 1.可以携带外部路由的 tag 标签信息的是以下哪一类 LSA? A、4 类 LSA B、5 类 LSA  C、3 类 LSA  D、2 类 LSA 答案:B 解析: 暂无解析 2..两台路由器直连,并设定网络类型为 p2p 建立OSPF 邻居。那么两台路由器传输 OSPF 报文的目的 IP 地址是以下哪一项? A、使用组播地址 224.0.0.6 B