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中兴笔试复盘 的相关文章

  • json.net自定义jobject反序列化

    我正在尝试使用 JsonConvert DeserializeObject string 将字符串反序列化为可与动态一起使用的 jobject 来动态访问 json 文档 但是我想避免知道文档的大小写 以便我可以输入 dynamic doc
  • CSharpRepl emacs 集成?

    我碰巧知道莫诺CSharpRepl http www mono project com CsharpRepl 是否有 emacs csharp 模式使用它在一个窗口中运行 REPL 并像 python 模式一样在另一个窗口中编译 运行 C
  • 在 C# 中调用 C++ 库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有很多用 C 编写的库 我想从 C 调用这些库 但是 我遇到了很多问题 我想知道是否有书籍或指南告诉我如何做到这一点 Dll导入 htt
  • 从模板切换传递的类型

    在 C 中是否可以检查传递给模板函数的类型 例如 template
  • 运行需要 MySql.Data 的内置 .NET 应用程序

    我在运行我编写的内置 NET 应用程序时遇到问题 我的应用程序使用最新的 MySql 连接器 该连接器安装在我的系统上 当我尝试将其添加为引用时 该连接器显示为 NET 4 Framwork 组件 当我在环境中以调试模式运行应用程序时 一切
  • 检测到堆栈崩溃

    我正在执行我的 a out 文件 执行后 程序运行一段时间 然后退出并显示消息 stack smashing detected a out terminated Backtrace lib tls i686 cmov libc so 6 f
  • 在开关中使用“goto”?

    我看到了一个建议的编码标准 内容如下Never use goto unless in a switch statement fall through 我不跟 这个 例外 案例到底是什么样的 这证明了goto 此构造在 C 中是非法的 swi
  • 获取 boost Spirit 语法中的当前行

    我正在尝试使用 boostspirit 获取正在解析的文件的当前行 我创建了一个语法类和结构来解析我的命令 我还想跟踪在哪一行找到命令并将其解析到我的结构中 我将 istream 文件迭代器包装在 multi pass 迭代器中 然后将其包
  • 增强精神、递归和堆栈溢出

    为什么下面的代码在运行时崩溃 它会给出堆栈溢出错误 include
  • C# 编译器不会优化不必要的强制转换

    前几天 在写答案的时候这个问题 https stackoverflow com questions 2208315 why is any slower than contains在这里 关于溢出 我对 C 编译器感到有点惊讶 它没有按照我的
  • 根据对象变量搜索对象列表

    我有一个对象列表 这些对象具有三个变量 ID 名称和值 这个列表中可能有很多对象 我需要根据ID或Name找到一个对象 并更改值 例子 class objec public string Name public int UID public
  • 析构函数中的异步操作

    尝试在类析构函数中运行异步操作失败 这是代码 public class Executor public static void Main var c1 new Class1 c1 DoSomething public class Class
  • 在 asp.net MVC 中使用活动目录进行身份验证

    我想使用活动目录对我的 asp net mvc 项目中的用户进行身份验证 在网上冲浪了几个小时后 我没有找到任何对我有用的东西 我已经看到了所有结果 但什么也没有 我尝试按照许多帖子的建议编辑我的 web config 如果有人可以帮助我提
  • 引用/指针失效到底是什么?

    我找不到任何定义指针 引用无效在标准中 我问这个问题是因为我刚刚发现 C 11 禁止字符串的写时复制 COW 据我了解 如果应用了 COW 那么p仍然是一个有效的指针并且r以下命令后的有效参考 std string s abc std st
  • 从BackgroundWorker线程更新图像UI属性

    在我正在编写的 WPF 应用程序中 我有一个 TransformedBitmap 属性 该属性绑定到 UI 上的 Image 对象 每当我更改此属性时 图像就会更新 因此显示在屏幕上的图像也会更新 为了防止在检索下一张图像时 UI 冻结或变
  • Project Euler #8,我不明白我哪里出了问题[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在做项目欧拉第八题 https projecteuler net problem 8 其中我得到了这个大得离谱的数字 7316
  • 如何从 Rx Subscribe 回调异步函数?

    我想回调 Rx 订阅中的异步函数 例如 像那样 public class Consumer private readonly Service service new Service public ReplaySubject
  • 使用 jQuery 从 ASP.Net JSON 服务获取数据

    我正在尝试调用 Google 地图地理编码 API 从纬度 经度对中获取格式化的地址 然后将其记录到控制台 我正在尝试获取为给定位置返回的第一个 formatted address 项目 我很简单无法从 JSON 中提取该项目 我不知道为什
  • 如何调试 .NET 运行时中的内部错误?

    我正在尝试调试一些处理大文件的工作 代码本身works 但 NET 运行时本身会报告零星错误 对于上下文 这里的处理是一个 1 5GB 文件 仅加载到内存中一次 在循环中处理和释放 故意尝试重现此否则不可预测的错误 我的测试片段基本上是 t
  • 如何在 winforms 应用程序的主屏幕显示之前显示欢迎屏幕?

    我想在应用程序启动时加载欢迎屏幕 然后用户单击欢迎屏幕上的按钮 然后关闭欢迎屏幕 最后显示主屏幕 static void Main startup method being called Application EnableVisualSt

随机推荐

  • 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 排序问题 快速排序最适合排完全无序的数据 如果基本有序的数据反而会耗时比较长 原因在于这种情况下一般拿第一个数做基准值的话 容易出现按基准