每日一练 — 2022.02.27

2023-11-05 07:59
文章标签 每日 27 2022.02

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

文章目录

  • 一,戳气球
    • 1,程序简介
      • 示例 1:
      • 示例 2:
      • 提示:
    • 2,程序代码
    • 3,运行结果
  • 二,给表达式添加运算符
    • 1,程序简介
      • 示例 1:
      • 示例 2:
      • 示例 3:
      • 示例 4:
      • 示例 5:
      • 提示:
    • 2,程序代码
    • 3,运行结果
  • 三,只出现一次的数字 II
    • 1,程序简介
      • 示例 1:
      • 示例 2:
      • 提示:
      • 进阶:
    • 2,程序代码
    • 3,运行结果


一,戳气球

1,程序简介

有 n 个气球,编号为0 到 n - 1,每个气球上都标有一个数字,这些数字存在数组 nums 中。

现在要求你戳破所有的气球。戳破第 i 个气球,你可以获得 nums[i - 1] * nums[i] * nums[i + 1] 枚硬币。 这里的 i - 1 和 i + 1 代表和 i 相邻的两个气球的序号。如果 i - 1或 i + 1 超出了数组的边界,那么就当它是一个数字为 1 的气球。

求所能获得硬币的最大数量。

示例 1:

  • 输入:nums = [3,1,5,8]
  • 输出:167
  • 解释:
    nums = [3,1,5,8] --> [3,5,8] --> [3,8] --> [8] --> []
    coins = 315 + 358 + 138 + 181 = 167

示例 2:

  • 输入:nums = [1,5]
  • 输出:10

提示:

  • n == nums.length
  • 1 <= n <= 500
  • 0 <= nums[i] <= 100

2,程序代码

"""
时间:2022年2月27日
作者:小梁aixj
功能:戳气球
"""
class Solution:def maxCoins(self, nums: [int]) -> int:n=len(nums)+2nums=[1]+nums+[1]dp=[[0]*n for _ in range(n)]for i in range(n-1,-1,-1):for j in range(i,n):if j-i>1:for k in range(i+1,j):dp[i][j]=max(dp[i][j],dp[i][k]+dp[k][j]+nums[i]*nums[k]*nums[j])return dp[0][n-1]
#%%
s = Solution()
print(s.maxCoins(nums = [3,1,5,8]))  

3,运行结果

在这里插入图片描述

二,给表达式添加运算符

1,程序简介

给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target ,在 num 的数字之间添加 二元 运算符(不是一元)+、- 或 * ,返回所有能够得到目标值的表达式。

示例 1:

  • 输入: num = “123”, target = 6
  • 输出: [“1+2+3”, “123”]

示例 2:

  • 输入: num = “232”, target = 8
  • 输出: [“23+2", "2+32”]

示例 3:

  • 输入: num = “105”, target = 5
  • 输出: [“1*0+5”,“10-5”]

示例 4:

  • 输入: num = “00”, target = 0
  • 输出: [“0+0”, “0-0”, “0*0”]

示例 5:

  • 输入: num = “3456237490”, target = 9191
  • 输出: []

提示:

  • 1 <= num.length <= 10
  • num 仅含数字
  • − 2 31 < = t a r g e t < = 2 31 − 1 -2^{31} <= target <= 2^{31} - 1 231<=target<=2311

2,程序代码

"""
时间:2022年2月27日
作者:小梁aixj
功能:给表达式添加运算符
"""
class Solution:def __init__(self):self.size = 0self.num = []self.now = []self.sign = []def addOperators(self, num: str, target: int) -> [str]:if not num:return []self.size = len(num)self.num = numself.now.append(num[0])self.dfs(0, num[0] == "0")ans = []for ss in self.sign:if eval(ss) == target:ans.append(ss)return ansdef dfs(self, i, zero_start):if i == self.size - 1:self.sign.append("".join(self.now))else:self.now.extend(["+", self.num[i + 1]])self.dfs(i + 1, self.num[i + 1] == "0")self.now.pop()self.now.pop()self.now.extend(["-", self.num[i + 1]])self.dfs(i + 1, self.num[i + 1] == "0")self.now.pop()self.now.pop()self.now.extend(["*", self.num[i + 1]])self.dfs(i + 1, self.num[i + 1] == "0")self.now.pop()self.now.pop()if not zero_start:self.now.extend([self.num[i + 1]])self.dfs(i + 1, False)self.now.pop()
#%%                
s = Solution()
print(s.addOperators(num = "232", target = 8))

3,运行结果

在这里插入图片描述

三,只出现一次的数字 II

1,程序简介

给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。

示例 1:

  • 输入:nums = [2,2,3,2]
  • 输出:3

示例 2:

  • 输入:nums = [0,1,0,1,0,1,99]
  • 输出:99

提示:

  • 1 <= nums.length <= 3 * 104
  • − 2 31 < = n u m s [ i ] < = 2 31 − 1 -2^{31} <= nums[i] <= 2^{31} - 1 231<=nums[i]<=2311
  • nums 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次

进阶:

  • 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

2,程序代码

"""
时间:2022年2月27日
作者:小梁aixj
功能:只出现一次的数字 II
"""
class Solution(object):def singleNumber(self, nums):""":type nums: List[int]:rtype: int"""res = 0for i in range(32):bitnum = 0bit = 1 << ifor num in nums:if num & bit:bitnum += 1if bitnum % 3 != 0:res ^= bitreturn res
#%%
s = Solution()
print(s.singleNumber(nums = [2,2,3,2]))

3,运行结果

在这里插入图片描述

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


原文地址:https://blog.csdn.net/m0_62617719/article/details/123168546
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/348480

相关文章

【每日一题】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 <=

树莓派5_opencv笔记27:Opencv录制视频(无声音)

今日继续学习树莓派5 8G:(Raspberry Pi,简称RPi或RasPi)  本人所用树莓派5 装载的系统与版本如下:  版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下: 今天就水一篇文章,用树莓派摄像头,Opencv录制一段视频保存在指定目录... 文章提供测试代码讲解,整体代码贴出、测试效果图 目录 阶段一:录制一段

【每日刷题】Day113

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

力扣 739. 每日温度【经典单调栈题目】

1. 题目 理解题意: 1.1. 给一个温度集合, 要返回一个对应长度的结果集合, 这个结果集合里面的元素 i 是 当前 i 位置的元素的下一个更高温度的元素的位置和当前 i 位置的距离之差, 若是当前元素不存在下一个更高温度的元素, 则这个位置用0代替; 2. 思路 本题用单调栈来求解;单调栈就适用于来求当前元素左边或者右边第一个比当前元素大或者小的元素;【单调栈:让栈中的元素保持单调

每日一题——第八十一题

打印如下图案: #include<stdio.h>int main() {int i, j;char ch = 'A';for (i = 1; i < 5; i++, ch++){for (j = 0; j < 5 - i; j++){printf(" ");//控制空格输出}for (j = 1; j < 2 * i; j++)//条件j < 2 * i{printf("%c", ch

每日一题,力扣leetcode Hot100之238.除自身以外数组的乘积

乍一看这个题很简单,但是不能用除法,并且在O(N)时间复杂度完成或许有点难度。 考虑到不能用除法,如果我们要计算输出结果位置i的值,我们就要获取这个位置左边的乘积和右边的乘积,那么我新设立两个数组L和R。 对于L来说,由于表达的是位置i左边的数的乘积,那么L[0]=1,因为第一个数字左边没数那么为了不影响乘积初始值就设置为1,那么L[1]=L[0]*nums[0],那么L[i]=L[i-1

英语每日一段 195

Promising economic indicators won’t instantly reverse the lingering impact of hard times for millions of families, workplace culture expert Jessica Kriegel said. “Perception and reality are sometimes

GitHub每日最火火火项目(9.7)

项目名称:polarsource / polar 项目介绍:polar 是一个开源的项目,它是 Lemon Squeezy 的替代方案,具有更优惠的价格。该项目旨在让开发者能够凭借自己的热情进行编码并获得报酬。通过使用 polar,开发者可以更轻松地实现自己的创意和项目,并从中获得收益。 项目地址:https://github.com/polarsource/polar项目名称:psf / bla