模拟算法其实就是根据题目做,题目要求什么,就做什么。一些复杂的模拟题其实还是把些简单的操作组合了一下,所以模拟题是最锻炼耐心的,也是训练编码能力的最好的暴力算法。

1.数据结构

对于模拟题而言,最关键的其实是数据结构,看到一个问题,选择合适的数据结构,
然后根据问题来实现对应的功能。模拟题的常见数据结构主要就是:数组、字符串、矩阵、链表、二叉树等。

1.1基于数组

利用数组的数据结构,根据题目要求,去实现算法,如:1920.基于排列构建数组、序创建目标数组、1603.设计停车系统、2149.按符号重排数组、2221.数组的三角和。

1.2 基于字符串

字符串配对数目、LCP 17.速算机器人、537.复数乘法利用字符串的数据结构,根据题目要求,去实现算法,如:2011.执行操作后的变量值。

1.3基于链表

利用链表的数据结构,根据题目要求,去实现算法,如:2181.合并零之间的节点、1823.找出游戏。

1.4基于矩阵

利用矩阵的数据结构,根据题目要求,去实现算法,如:2120.执行所有后指令、1252.奇数值单元格的数目、832.翻转图像、657.机器人能否返回原点、289.生命游戏、59.螺旋矩阵Ⅱ、885.螺旋矩阵 。

2.算法技巧

模拟时一般会用到一些算法技巧,或者说混合算法,比如 排序、递归、迭代 等等

2.1、排序

排序后,干一件事情,如:950.按递增顺序显示卡牌

2.2、递归

需要借助递归来实现,如:1688.比赛中的配对次数、169.得到 0的操作数、258.各位相加

2.3、迭代

不断迭代求解,其实就是利用 while 循环来实现功能,如:1860.增长的内存泄露、258.各位相加

3.实战

3.1 力扣面试题16.01 交换数字

编写一个函数,不用临时变量,直接交换numbers = [a, b]ab的值。

int* swapNumbers(int* a, int numbersSize, int* returnSize){
*returnSize = 2;
a[0] = a[0] ^ a[1];
a[1] = a[0] ^ a[1];
a[0] = a[0] ^ a[1];
return a;
}

3.2力扣 LCR 133.位1的个数

编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数。

int hammingWeight(uint32_t n) {
int sum = 0;
while(n){
sum += n % 2;
n /= 2;
}
return sum;
}

3.3 力扣1991.找到数组的中间位置

给你一个下标从 0 开始的整数数组 nums ,请你找到 最左边 的中间位置 middleIndex (也就是所有可能中间位置下标最小的一个)。

int findMiddleIndex(int* nums, int numsSize) {
for(int i = 0; i < numsSize; i++){
int l = 0;
int r = 0;
for(int j = 0; j < i; j++){
l += nums[j];
}
for(int j = i + 1; j < numsSize; j++){
r += nums[j];
}
if(l == r){
return i;
}
}
return -1;
}

C语言模拟算法的更多相关文章

  1. 语言模拟ATM自动取款机系统

    C语言实验报告       题目名称:C语言模拟ATM自动取款机系统 C语言模拟实现ATM自动取款机功能:输入密码,余额查询,取款,存款,转账,修改密码,退出功能: 代码实现的功能: 账号及密码输入: ...

  2. 关于c语言模拟c++的多态

    关于c++多态,个人认为就是父类调用子类的方法,c++多态的实现主要通过虚函数实现,如果类中含有虚函数,就会出现虚函数表,具体c++多态可以参考<深度探索c++对象模型> c语言模拟多态主 ...

  3. linux内核中的C语言常规算法(前提:你的编译器要支持typeof和type)

    学过C语言的伙伴都知道,曾经比较两个数,输出最大或最小的一个,或者是比较三个数,输出最大或者最小的那个,又或是两个数交换,又或是绝对值等等,其实这些算法在linux内核中通通都有实现,以下的代码是我从 ...

  4. C语言经典算法 - 多维矩阵转一维矩阵的代码

    下边内容内容是关于C语言经典算法 - 多维矩阵转一维矩阵的内容,应该能对码农也有好处. #include <stdio.h>#include <stdlib.h>int mai ...

  5. 一张有料的图片!!!附文件-图片合成器C语言实现算法

    凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.打开F盘,先找两个文件,一个是压缩文件(2.rar),另一个是一张图片(1.jpg),将其放到F盘目录下, ...

  6. c语言模拟c++的继承和多态

    //C++中的继承与多态 struct A { virtual void fun() //C++中的多态:通过虚函数实现 { cout << "A:fun()" < ...

  7. C语言查找算法之顺序查找、二分查找(折半查找)

    C语言查找算法之顺序查找.二分查找(折半查找),最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 顺序查找 /*顺序查找 顺序查找是在一个已知无(或有序)序队列中找出与给定关键字相同的 ...

  8. C语言排序算法之简单交换法排序,直接选择排序,冒泡排序

    C语言排序算法之简单交换法排序,直接选择排序,冒泡排序,最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 简单交换法排序 /*简单交换法排序 根据序列中两个记录键值的比较结果来对换这两 ...

  9. c/c++面试总结---c语言基础算法总结2

    c/c++面试总结---c语言基础算法总结2 算法是程序设计的灵魂,好的程序一定是根据合适的算法编程完成的.所有面试过程中重点在考察应聘者基础算法的掌握程度. 上一篇讲解了5中基础的算法,需要在面试之 ...

  10. c/c++面试指导---c语言基础算法总结1

    c语言基础算法总结 1  初学者学习任何一门编程语言都必须要明确,重点是学习编程方法和编程思路,不是学习语法规则,语法规则是为编程实现提供服务和支持.所以只要认真的掌握了c语言编程方法,在学习其它的语 ...

随机推荐

  1. 【源码篇】Flutter Bloc背后的思想,一篇纠结的文章

    前言 看了Bloc源码后,心情有点复杂呀... 说点积极的... 用过Bloc的靓仔们,肯定能感受到,Bloc框架对开发页面,做了很清晰划分,框架强行定了俩种开发模式 Bloc模式:该模式划分四层结构 ...

  2. 017.Kubernetes二进制集群扩容worker

    一 前置准备 1.1 互信配置 为了更方便远程分发文件和执行命令,本实验配置master节点到其它节点的 ssh 信任关系. 1 [root@master01 ~]# ssh-copy-id -i ~ ...

  3. CANopen学习笔记(三)NMT

    NMT NMT主要用来管理和控制各个节点的状态,具体协议可以分为以下四类: NMT protocol Node guard protocol Heartbeat protocol Bootup pro ...

  4. Snap 使用

    Snap 是一个或多个应用程序的捆绑包,可在许多不同的 Linux 发行版中使用,无需依赖或修改.Snap 可从 Snap Store(一个拥有数百万用户的公共应用程序商店)中发现和安装.很多常用的软 ...

  5. 【Docker学习教程系列】8-如何将本地的Docker镜像发布到私服?

    通过前面的学习,我们已经知道,怎么将本地自己制作的镜像发布到阿里云远程镜像仓库中去.但是在实际工作开发中,一般,我们都是将公司的镜像发布到公司自己搭建的私服镜像仓库中,那么一个私服的镜像仓库怎么搭建? ...

  6. 在.net core使用Serilog,只要简单的三步

    第一步:在项目上用nuget安装 Serilog.AspNetCore 最新的稳定版即可 ,安装这个会把其他需要的包都给包含着 第二步:修改 Program.cs 的 CreateHostBuilde ...

  7. 把dataframe 一列转成 array

    把dataframe 一列转成 array

  8. vue单元测试

    0.测试钩子函数 describe的钩子函数 在测试块describe中,存在这四个钩子函数,他会在describe执行的不同时期调用: before():在该区块的所有测试用例之前执行 after( ...

  9. Angular 18+ 高级教程 – Library

    前言 当你需要管理超过一个项目时,你就需要知道怎么使用 Angular Library. 你可以把多个项目共享的组件放到这个 Library 了,就像 Angular Material 那样. 参考 ...

  10. TypeScript – 冷知识

    当 generic return 遇上 parameter 报错了.原因是 querySelector 默认返回类型是抽象的 Element. 而 method 参数要求的是具体的 InputElem ...