2023中兴笔试复盘

2023-11-17

选择加编程,选择题考的范围挺广的,编程题第一题有点难度,第二题还好,复盘一下遇到的有点卡顿的题目。

1.排序问题

快速排序最适合排完全无序的数据,如果基本有序的数据反而会耗时比较长,原因在于这种情况下一般拿第一个数做基准值的话,容易出现按基准值分为两半后左右不平衡,会让一边的递归完全失效,发挥不出快速排序的优势。
而且因为是基本有序的,容易出现对已经排好序的数组进行无效的递归排序的情况。
快排必须先从右边指针开始的原因: 我们的目标是小于基准值的全去左边,大于基准值的全去右边,因为最后有个交换操作,如果是右边先开始,最后停留位置是小于基准值的,如果是左边先开始,最后左右相遇的是大于基准值的,大于基准值的这个数要和基准值交换,破坏了顺序
快排代码:

#include <iostream>
using namespace std;

void quicksort(int left, int right, int nums[]){
	int key = left;//基准值下标
	int curl = left;//左指针
	int curr = right;//右指针
	while(curl < curr){//这个判断条件是让程序在第一次交换后继续进行
		//找右边第一个比基准值小的
		while(curl < curr && nums[curr] >= nums[key]){
			curr--;
		}
		//找左边第一个不符合要求,也就是比基准值大的,一样大的不用管,在之后的小数组里继续排序
		while(curl < curr && nums[curl] <= nums[key]){
			curl++;
		}
		if(curl < curr){//这时候curl前面的都是符合条件的, 3 2 4 ,curl指向4,我们需要交换3 和 2
			swap(nums[curl],nums[curr]);
		}else{
			swap(nums[key],nums[curl]);
			quicksort(left,curl-1,nums);
			quicksort(curl+1,right,nums);
		}
	}
}
int main(){
	int a[] = {10,2,4,5,1,8,7};
	quicksort(0,6,a);
	for(int num : a){
		cout << num << " ";
	}
}

2.python2函数参数格式

*arg 可变参数,参数不确定
arg = 9,直接确定好了参数的值,提供默认值
**arg 会把关键字参数转化为键值对,

3.java网络编程是在socket基础上的,而且是对ip、tcp协议都适用

4.软件开发模型:

  1. 边做边改模型
  2. 瀑布模型
  3. 快速原型模型
  4. 增量模型
  5. 螺旋模型
  6. 演化模型
  7. 喷泉模型
  8. 智能模型
  9. 混合模型
  10. RAD模型;

5.二分查找时间复杂度

二分查找是对半查找,查找次数x是总数n/2/2/2/2/2直到n为1的运算次数,所以2^x = n;时间复杂度x = 1og 2 n;

6.算法空间复杂度计算

在这里插入图片描述

7.辗转相除法求最大公约数的复杂度

辗转相除法思想:两个数m,n
1.得到m除以n的余数mod
2.将n作为新的被除数
2.将余数mod作为新的除数
……
重复以上过程,直至mod为0,此时的除数为最大公约数
代码实现:

#include <iostream>
#include <algorithm>
using namespace std;

int gcd(int a, int b){
	return b==0 ? a : gcd(b,a%b);
}
int main(){
	int res = gcd(346,897);
	cout << res;
}

注意这里核心代码的参数的位置,因为要做一个旧除数转为被除数这样一个操作,所以传参的时候位置要换一下。

8.编程题

类似题目:1135. 最低成本联通所有城市,https://leetcode.cn/problems/connecting-cities-with-minimum-cost/
1.按成本(边长)来排序
2.按照排好的顺序,依次构图,如果要添加的边的两个端点都已经添加过了,就不再重复添加了,否则则需要添加进去。每次添加的时候成本增加。

class UnionFindSet
{
private:
	vector<int>nums;
	int count;
public:
	UnionFindSet(int n){
		count = n;
		nums.resize(n+1);
		for(int i = 1; i <= n; i++){
			nums[i] = i;
		}
	}

    int find(int x){
		if(nums[x] == x){
			return x;
		}
		return find(nums[x]);
	}

	int merge(int node1, int node2){
		if(find(node1) == find(node2)){
			return false;
		}else{
			nums[max(node1,node2)] = min(node1,node2);
			count--;
			return true;	
		}
	}
	
	bool isable(){
		if(count == 2){
			return true;
		}else{
			return false;
		}
	}
};

class Solution {
public:
    int minimumCost(int n, vector<vector<int>>& connections) {
        sort(connections.begin(), connections.end(), [](const auto &a, const auto &b) {
            return a[2] < b[2];
        });
        UnionFindSet ufs(n);
		int res = 0;
        for(auto round : connections){
            if(ufs.merge(round[0], round[1])){
				res += round[2];
			}
        }
        return ufs.isable() ? -1 : res;
    }
};

但这个代码老是有一部分用例通过不了
在这里插入图片描述
我感觉的是问题出在联通集判断这

修改一下代码

class UFS{
private:
	vector<int>set;
	int count; //用来记录已经添加进去的节点数
	int sumcost;
public:
	//构造函数
	UFS(int n){
		count = n;
		sumcost = 0;
		set.resize(n+1);
	}
	//初始化集合
	void setcrt(int n){
		for(int i = 0; i <= n; i++){
			set[i] = i;
		}
	}
	//根据边关系梳理各节点之间关系
	void unioncrt(int a, int b, int cost){
		//第一种情况,两个点之前没有关系,统一用小的一个点做根
		if(set[a] != set[b]){
			int root = min(set[a],set[b]);//统一用这个去更新
			int key = max(set[a],set[b]);//将根为key的全部变为根为root
			for(int i = 0; i < set.size(); i++){
				if(set[i] == key){
					set[i] = root;
				}
			}
			count--;
			sumcost += cost;
		}
	}
	//是否可以全部联通
	bool isable(){
		if(count > 1){
			return false;
		}else{
			return true;
		}
	}
	//最小花费
	int getmincost(){
		return sumcost;
	}
};

class Solution {
public:
    int minimumCost(int n, vector<vector<int>>& connections) {
		sort(connections.begin(), connections.end(), [](const auto &a, const auto &b) {
            return a[2] < b[2];
        });
		UFS u(n);
		u.setcrt(n);
		for(int i = 0; i < connections.size(); i++){
			u.unioncrt(connections[i][0], connections[i][1], connections[i][2]);
		}
		if(u.isable()){
			return u.getmincost();
		}else{
			return -1;
		}
    }
};

勉强过了,但这个时间复杂度。。。
在这里插入图片描述
主要是每次的遍历修改根比较耗时,后面做一下优化吧。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2023中兴笔试复盘 的相关文章

  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • 重载<<的返回值

    include
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • KindEditor在php环境下上传图片功能集成

    KindEditor 是一套开源的在线HTML编辑器 后台可与 Java NET PHP ASP 等程序集成 为实现图文混排的编辑效果 我们通常都会用到编辑器的图片上传功能 本文会简单讲一下KinEditor的基本使用 主要说明如何在php
  • nodejs以太坊Dapp开发中文资料收集(精选版)

    区块链技术是趋势 会Nodejs 想做区块链相关 选择了以太坊这个平台 网上资料虽然多少能搜到 但是鱼龙混杂 重复错误百出 不够系统 在几天的搜寻筛选之后 整理了以下中文以太坊智能合约开发资料 有不足或者补充的请留言 互相交流共同进步 1
  • C/C++ 两个感叹号连用

    两个 是为了把非0值转换成1 而0值还是0 如下表 0 1 0 1 0 1 10 0 1
  • 无代码开发和低代码开发的本质区别

    目录 一 两者的概念区别 二 两者面向的人群不同 三 集成能力的区别 四 扩展能力的区别 五 选购建议 无代码和低代码开发都是目前新兴的一种软件开发方式 一 两者的概念区别 低代码开发 Low Code Development 是一种通过使
  • linux下的mtd

    通过 proc虚拟文件系统读取MTD分区表 cat proc mtd 具体由linux drivers mtd下的mtdcore c文件中的mtd read proc函数来实现 读出来的结果类似如下 dev size erasesize n
  • 特殊的喜好

    喜好测试是一种测试气味 您在其中断言某些内容与测试内容无关 例如 在运行时更改其安排集合的算法时 尝试声明集合中项目的顺序可能会导致失望 同样 断言错误消息的确切测试 除非是测试消息的构造 否则如果以某种测试不关心的方式改进消息 则可能导致
  • MySQL第六讲 MySQL分库分表方案

    分库分表概念 分库分表就是业务系统将数据写请求分发到master节点 而读请求分发到slave 节点的一种方案 可以大大提高整个数据库集群的性能 但是要注意 分库分表的 一整套逻辑全部是由客户端自行实现的 而对于MySQL集群 数据主从同步
  • LLDB 常用命令

    LLDB 小结 简介 LLDB 是新一代高性能调试器 其是一组可重用组件的集合 这些组件大多是 LLVM 工程中的类库 如 Clang 表达式解析器或 LLVM 反汇编程序等 LLDB 是 Xcode 中默认的调试器 并且支持调试 C C
  • complier之stack machine with one register

    place holder
  • python 报错汇总【持续更新中....】

    1 Variable encoder embedding encoder already exists disallowed 总结 由于跑的翻译模型需要构建两个embed 一直报这个错误 InvalidArgumentError see a
  • 软考-系统架构师-计算机与网络基础知识-计算机网络基础知识

    文章目录 1 网络概述 1 1开放系统互连参考模型 1 2OSI协议集 2 计算机网络 2 1广域网局域网和城域网 2 2网络互联 2 3Internet 3 网络管理与网络安全 3 1网络管理 3 2计算机网络安全 3 3VPN 4 网络
  • 大数据挖掘的意义是什么?

    数据挖掘一般是指从大量的数据中通过算法搜索隐藏于其中信息的过程 数据挖掘本质上像是机器学习和人工智能的基础 它的主要目的是从各种各样的数据来源中 提取出超集的信息 然后将这些信息合并让你发现你从来没有想到过的模式和内在关系 这就意味着 数据
  • Python:等差数列

    题目描述 数学老师给小明出了一道等差数列求和的题目 但是粗心的小明忘记了一 部分的数列 只记得其中 N 个整数 现在给出这 N 个整数 小明想知道包含这 N 个整数的最短的等差数列有几项 输入描述 输入的第一行包含一个整数 N 第二行包含
  • linux常会用到的命令

    查看gpu上运行的进程 nvidia smi 查看进程的完整信息 ps f p 进程号 搜索含有指定字符的进程信息 如radar ps ef grep radar 复制文件时排除某个文件夹 如从源路径中排除data rsync av exc
  • eNSP基础配置

    用户视图
  • latch&timeborrowing&Lookup latch

    原创文章 latch 锁存器 电路图结构如下 当 E 1 时 latch直传 transparent D端信号的变化会即时反应在Q端 当 E 0 时 latch关断 closed Q端保持关断瞬间D端的值 设计中使用Latch的好处是 相比
  • 【大数据】Flink 详解(三):核心篇 Ⅱ

    本系列包含 大数据 Flink 详解 一 基础篇 大数据 Flink 详解 二 核心篇 大数据 Flink 详解 三 核心篇 大数据 Flink 详解 四 核心篇 大数据 Flink 详解 五 核心篇 大数据 Flink 详解 六 源码篇
  • NoSQL - MongoDB及工具 - 安装

    1 应用场景 主要用于安装和使用MongoDB 2 学习 操作 1 文档阅读 NoSQL MongoDB 学习 实践 穿素白衫的中少年的博客 CSDN博客 2 整理输出 用于学习 推荐安装最新版本 或者 最新稳定版 这里就安装最新稳定版 如
  • vector string及数组使用

    使用vector输入字符串并输出字符串 include
  • 2023中兴笔试复盘

    选择加编程 选择题考的范围挺广的 编程题第一题有点难度 第二题还好 复盘一下遇到的有点卡顿的题目 1 排序问题 快速排序最适合排完全无序的数据 如果基本有序的数据反而会耗时比较长 原因在于这种情况下一般拿第一个数做基准值的话 容易出现按基准