秋招突击——6/19——新作{括号生成、合并K个排序链表}

文章目录

    • 引言
    • 新作
      • 括号生成
        • 个人实现
          • 实现时遇到的问题
          • 实现代码
        • 参考思路
          • 实现代码
      • 合并K个有序链表
        • 个人实现
            • 实现代码
        • 参考实现
          • 实现代码
    • 总结

引言

  • 今天把第二篇论文投了,后续有审稿意见再说,然后在进行修改的。
  • 后续的生活要步入正轨了,每天刷题,然后再背八股。

新作

括号生成

  • 题目链接
    在这里插入图片描述
个人实现
  • 之前做过一个题目,是验证括号是否合法,这道题是让生成括号。可以在暴力的基础上,进行括号合法性的验证。最终的思路如下
  • 有两种情况,验证括号的栈是否为空
    • 如果栈为空,
      • 还可以入栈,那就入栈
      • 所有括号已经匹配完毕,为空,将结果加入到res中
    • 如果栈不为空
      • 入栈
      • 出栈
  • 想的挺好的,但是实现起来比较困难,没有啥头绪,所以采用了最直接的方法进行暴力遍历所有的组合,然后判定是否符合要求,符合要求再添加对应的元素。时间复杂度是真的高 ,好在数据量并不多。
实现时遇到的问题
  • 排列组合应该怎么用代码实现,想了半天,写的有点不熟,自己一点点理出来的,应该好好记住才对。
    • 这里是使用dfs实现组合的。
实现代码

在这里插入图片描述

实现代码

#include <iostream>
#include <stack>
#include <vector>using namespace std;bool judge(string s){stack<char> st;for (auto c:s) {if (c == '(')   st.push(c);else{if (st.empty()) return false;else    st.pop();}}return st.empty();
}vector<string> vt;
void dfs(string s,int t,int k){if (t == k){vt.push_back(s);}else{dfs(s + "(",t + 1,k);dfs(s + ")",t + 1,k);}
}vector<string> generateParenthesis(int n){vector<string> res;dfs("",0,2*n);for (auto t:vt) {if (judge(t))   res.push_back(t);}return res;
}
int main(){}
参考思路

下面这个是个好东西,经常用,需要呗

  • 一个合法的括号序列的充分必要条件

    • 任意前缀中,左括号的数量,大于等于右括号数量
    • 左右括号数量相等
  • 所以,第二个条件已经满足了,所以需要需要针对第一个条件进行计算

  • 使用递归来实现将所有合法方案输出的情况

    • 任何情况,都可以填左括号
    • 什么时候填右括号
      • 满足数量要求
      • 前缀的左括号数量的大于等于右括号
  • 定理:卡特兰数

实现代码

太牛逼了,这个代码写的真丝滑!!

vector<string> res;
void dfs(int n,int lc,int rc,string s){/** n表示括号数量,lc表示左括号数量,rc表示右括号数量,s表示字符串*/// 判定什么时候加左括号if (lc == n && rc == n) res.push_back(s); else{// 什么时候加右括号if (lc < n) dfs(n,lc + 1,rc,s + "(");if (lc > rc && rc < n) dfs(n,lc,rc + 1,s + ")");}
}vector<string> generateParenthesis(int n){dfs(n,0,0,"");return res;
}

实现过程中,有如下问题

  • 注意,实现判断的是否相等,不相等再加括号,相等了就不加括号
  • 如果加括号,再继续往下处理。

合并K个有序链表

  • 题目链接
    在这里插入图片描述
个人实现
  • 将所有的链表合成一个新的有序链表,有以下两个特征
    • 有序链表
    • 多个合成一个
  • 之前做过两个有序链表合成一个有序链表,用的两个指针同时比较,选择一个最小的然后进行链接。
  • 如果采用同样的方法,计算复杂度有点高,有什么别的办法吗?如果不行,就只能暴力了。
  • 最多是500个子队列,然后要维护500个指针。这个方法是不得行的。
  • 跳过,这个不会做。

还有什么思路
维系一个最值的队列

  • 计算每一个链表的最大值和最小值,然后比较对应的最值,根据最值进行链接。

如果最值就是数次链接,这道题只能这样遍历

实现代码

暴力匹配

  • 编程的具体实现就是,两两匹配,然后将第三者元素加入其中。将问题拆解。
  • 具体实现如下,头一次跑通了一个hard的题目,心情很不错,向这种拆解问题的思想,真的很好用呀!
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* mergeKLists(vector<ListNode*>& lists) {auto dummy = new ListNode(-1);auto temp = dummy;for (auto t:lists) {temp->next = mergeTwoLists(temp->next,t);return dummy->next;}return dummy->next;
}ListNode* mergeTwoLists(ListNode* aNode,ListNode* bNode){auto dummy = new ListNode(-1);auto temp = dummy;while(aNode && bNode){if (aNode->val < bNode->val){temp->next = aNode;aNode = aNode->next;}else{temp->next = bNode;bNode = bNode->next;}temp = temp->next;}temp->next = aNode == nullptr ? bNode:aNode;return dummy->next;
}};

在这里插入图片描述

参考实现
  • 使用堆来找最小值,改变时间复杂度有k变成logk

  • stl中的优先队列是使用堆进行排序的,所以这里使用优先队列进行实现。

    • 这里自定义优先队里的比较函数比较生僻,需要死记硬背

定义一个保存ListNode 的优先队列

  • 这个必须要记住,而且必须加上对应的容器
struct Cmp{bool operator()(ListNode* a,ListNode* b){return a->val > b->val;}
};ListNode* mergeKLists(vector<ListNode*>& lists) {priority_queue<ListNode* ,vector<ListNode*>,Cmp> heap;
}
实现代码
  • 下面这个题写的真简洁,学到了。
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
struct ListNode {int val;ListNode *next;ListNode() : val(0), next(nullptr) {}ListNode(int x) : val(x), next(nullptr) {}ListNode(int x, ListNode *next) : val(x), next(next) {}
};struct Cmp{bool operator()(ListNode* a,ListNode* b){return a->val > b->val;}
};ListNode* mergeKLists(vector<ListNode*>& lists) {priority_queue<ListNode* ,vector<ListNode*>,Cmp> heap;auto dummy = new ListNode(-1),tail = dummy;for (auto t:lists)  if(t) heap.push(t);while(heap.size()){auto t = heap.top();heap.pop();tail->next = t;tail = tail->next;if (t->next) heap.push(t->next);}return dummy->next;
}

总结

  • 今天两道题基本上都写出来,但是效率都不高,学到了新的知识点,不错,明天继续。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/354541.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jadx+android studio+雷电模拟器 动态调试apk

# 环境准备 1.雷电模拟器&#xff0c;开启root 2.jadx&#xff1a; https://sourceforge.net/projects/jadx.mirror/files/v1.5.0/jadx-gui-1.5.0-with-jre-win.zip/download 3.java jdk 11 https://www.oracle.com/cn/java/technologies/javase/jdk11-archive-downloads.…

【Java】BigDecimal类型——BigDecimal 为什么可以保证精度不丢失

目录 简介类介绍案例分析总结BigDecimal类型的使用场景MySQL中存储BigDecimal类型数据补充&#xff1a;BigDecimal类型使用时的注意事项BigDecimal类型的其他使用 简介 BigDecimal是Java中的一个类&#xff0c;用于处理大数运算。它提供了精确的数值计算&#xff0c;可以处理任…

【深度学习基础】详解Pytorch搭建CNN卷积神经网络LeNet-5实现手写数字识别

目录 写在开头 一、CNN的原理 1. 概述 2. 卷积层 内参数&#xff08;卷积核本身&#xff09; 外参数&#xff08;填充和步幅&#xff09; 输入与输出的尺寸关系 3. 多通道问题 多通道输入 多通道输出 4. 池化层 平均汇聚 最大值汇聚 二、手写数字识别 1. 任务…

数据库 |试卷八试卷九试卷十

1.基数是指元组的个数 2.游标机制 3.触发器自动调用 4.count(*)统计所有行&#xff0c;不忽略空值null&#xff0c;但不但要全局扫描&#xff0c;也要对表的每个字段进行扫描&#xff1b; 5.eacherNO INT NOT NULL UNIQUE&#xff0c;为什么不能断定TeacherNO是主码&#xff…

基于GWO-CNN-LSTM数据时间序列预测(多输入单输出)-多维时间序列模型-MATLAB实现

基于GWO-CNN-LSTM数据时间序列预测(多输入单输出)-多维时间序列模型-MATLAB实现 基于灰狼优化&#xff08;Grey Wolf Optimizer, GWO&#xff09;、卷积神经网络&#xff08;Convolutional Neural Network, CNN&#xff09;和长短期记忆网络&#xff08;Long Short-Term Memor…

【修复Win11错误 0x80010135: 路径太长】

1. 问题现象&#xff1a; 一个意外错误使你无法复制该文件。如果你继续收到此错误&#xff0c;可以使用错误代码来搜索有关此问题的帮助。 错误 0x80010135: 路径太长 或者这样 2. 分析问题 造成这个问题的主要原因包括&#xff1a; 文件路径长度超过 260 个字符&#xf…

C++程序员笔试训练

面试题1&#xff1a;使用库函数将数字转换位字符串 考点&#xff1a;c语言库函数中数字转换位字符串的使用 char *gcvt(double number, int ndigit, char *buf);参数说明&#xff1a; number&#xff1a;待转换的double类型数值。 ndigit&#xff1a;保留的小数位数。 buf&am…

Character Animator 2024 mac/win版:赋予角色生命,动画更传神

Character Animator 2024是一款强大的角色动画制作软件&#xff0c;以其创新的功能和卓越的性能&#xff0c;为动画师、游戏开发者以及设计师们带来了全新的创作体验。 Character Animator 2024 mac/win版获取 这款软件采用了先进的骨骼绑定技术&#xff0c;使得角色动画的制作…

支持向量机 (SVM) 算法详解

支持向量机 (SVM) 算法详解 支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一种监督学习模型&#xff0c;广泛应用于分类和回归分析。SVM 特别适合高维数据&#xff0c;并且在处理复杂非线性数据时表现出色。本文将详细讲解 SVM 的原理、数学公式、应用场景…

一种基于非线性滤波过程的旋转机械故障诊断方法(MATLAB)

在众多的旋转机械故障诊断方法中&#xff0c;包络分析&#xff0c;又称为共振解调技术&#xff0c;是目前应用最为成功的方法之一。首先&#xff0c;对激励引起的共振频带进行带通滤波&#xff0c;然后对滤波信号进行包络谱分析&#xff0c;通过识别包络谱中的故障相关的特征频…

电商API接口详述:涵盖订单、库存等多功能接口介绍

电商商家自研管理系统&#xff0c;线下ERP系统或WMS系统想要接入电商平台订单打单发货&#xff0c;通过点三电商API可以一键对接多个电商平台&#xff0c;帮助商家、ERP/WMS服务商快速开发电商模块&#xff0c;实现电商业务管理功能&#xff0c;那么点三电商API接口有哪些可用接…

vue+webrtc(腾讯云) 实现直播功能 pc端+移动端

Websocket实现私聊和群聊 1. websocket的概念 1.1. 全双工概念2. websocket实现聊天室 2.1. WebSocket API 2.1.1. 构造方法 2.1.1.1. 语法2.1.1.2. 参数2.1.1.3. 抛出异常2.1.2. 常量2.1.3. 属性2.1.4. 方法2.1.5. 事件3. websocket实现群聊或私聊或图片发送 3.1. 项目的最终…

React+TS前台项目实战(七)-- 全局常用组件Select封装

文章目录 前言Select组件1. 功能分析2. 代码详细注释说明3. 使用方式4. 效果展示&#xff08;1&#xff09;鼠标移入效果&#xff08;2&#xff09;下拉框打开效果&#xff08;3&#xff09;回调输出 总结 前言 今天这篇主要讲全局select组件封装&#xff0c;可根据UI设计师要…

188. 买卖股票的最佳时机 IV

188. 买卖股票的最佳时机 IV 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;代码解释类级变量与初始化动态规划初始化递归函数 dfs_maxProfit Integer.MIN_VALUE / 5 的作用总结 参考代码&#xff1a;_188买卖股票的最佳时机IV 错误经验吸取 原题链接&#xf…

全面升级,票据识别新纪元:合合信息TextIn多票识别2.0

票据识别 - 自动化业务的守门员 发票、票据识别&#xff0c;是OCR技术和RPA、CMS系统结合的一个典型场景&#xff0c;从覆盖率、覆盖面的角度来说&#xff0c;应该也是结合得最成功的场景之一。 产品简介 国内通用票据识别V2.0&#xff08;简称“多票识别2.0”&#xff09;是…

Java 集合框架详谈及代码分析(Iterable->Collection->List、Set->各接口实现类、Map->各接口实现类)

目录 Java 集合框架详谈及代码分析&#xff08;Iterable->Collection->List、Set->各接口实现类、Map->各接口实现类&#xff09;1、集合概述1-1&#xff1a;Java 集合概述1-2&#xff1a;List、Set、Map 三者的区别&#xff1f;1-3&#xff1a;集合框架底层数据结…

SM4 国密——加密,解密

SM4 国密的使用 前言——引用管理包SM4解密——ECB模式SM4加密——ECB模式SM4解密——CBC模式SM4加密——CBC模式SM4工具类SM4主体类SM4实体类 前言——引用管理包 引用NuGet管理包BouncyCastle.Crypto SM4解密——ECB模式 public string CiphertextParsing(string json) {tr…

四十八、openlayers地图调色总结——锐化、模糊、浮雕滤镜,调整地图色相、饱和度、亮度

这篇是对滤镜的总结&#xff0c;方便工作中直接使用。 想要调整图层的颜色&#xff0c;有两种方法。 方法一&#xff1a; 加载图层时使用tileLoadFunction函数拿到context添加canvas滤镜效果。 this.imagery new TileLayer({source: new XYZ({url: "https://server.arc…

android串口助手apk下载 源码 演示 支持android 4-14及以上

android串口助手apk下载 1、自动获取串口列表 2、打开串口就开始接收 3、收发 字符或16进制 4、默认发送at\r\n 5、android串口助手apk 支持android 4-14 &#xff08;Google seral port 太老&#xff09; 源码找我 需要 用adb root 再setenforce 0进入SELinux 模式 才有权限…

关于docker无法正常下载镜像的问题

文章目录 之前还可以正常下载镜像&#xff0c;但是一段时间之后就无法下载了&#xff0c;猜测可能是政治原因&#xff0c;无法连接到国外服务器&#xff0c;所以我设置了阿里云的镜像加速器。 配置方法如下&#xff1a; 前往阿里云&#xff08;https://help.aliyun.com/zh/acr/…