当前位置: 首页 > ops >正文

院校机试刷题第十三天:代码随想录算法训练营第七天

一、回顾代码随想录算法训练营第七天

1.454四数相加

1.1解题思路

利用哈希表将四层for转换为两层for,寻找对应的元素是否在map中

关键就是四层for循环太复杂了,时空消耗太大了,所以最好退化为两层for循环,也就是将四数之和变为两数之和,先将前两个数的和统计到map中,初始化map;然后遍历后两个数组得到c + d的和,因为a + b = 0 - c - d;所以就在map中找有没有key是 0 - c - d的,如果有的话,那么就统计这个key对应的value,统计到总和中即可,最终返回这个总和

1.2代码

class Solution {
public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {unordered_map<int, int> umap;for(int a : nums1) {for(int b : nums2) {umap[a + b]++;}}int count1 = 0;for(int c : nums3) {for(int d : nums4) {if(umap.find(0 - c - d) != umap.end()) {count1 += umap[0 - c - d];}}}return count1;}
};

2.15三数之和

关键要理解双指针法,因为这里有去重的可能性,所以要考虑到位出现重复如何处理。去重:排序,遇到相同的元素就跳过。

注意边界条件,一切针对left和right的行为都要基于left < right这个条件,否则执行left++,right--的时候,会出现left和right越界的情况。

3.18四数之和

和三数之和思路一样

积累语法

if((long) nums[i] + nums[j] + nums[left] + nums[right] < target) left++;

这里的(long)将nums[i]操作数类型强制转换为long,以防止数据太大无法处理。同时编译器将会将所有的剩余其他操作数同样也隐式转换为long类型。 

二、P1328生活大爆炸版石头剪刀布

1.解题思路

这些题目真的是完全没有算法,全靠模拟,可以定义两个数组元素是重复值的数组,将别的元素都进行编码,并且编码定义胜负规则。

1.根据规律数组取余定义所有的数组

2.定义胜负规则

3.进行数组的遍历,同时求双方的得分。

2.代码

#include <iostream>
#include <vector>
using namespace std;int main() {int N, NA, NB;cin >> N >> NA >> NB;vector<int> guilvA(NA, 0);vector<int> guilvB(NB, 0);for(int i = 0; i < NA; i++) {cin >> guilvA[i];}for(int j = 0; j < NB; j++) {cin >> guilvB[j];}int sumA = 0;int sumB = 0;// 给数组赋重复变化的元素的值vector<int> A(N, 0);vector<int> B(N, 0);for(int i = 0; i < N; i++) {A[i] = guilvA[i % NA];B[i] = guilvB[i % NB];}for(int i = 0; i < N; i++) {if(A[i] == B[i]) continue;if(A[i] == 0 && B[i] == 1) sumB++;if(A[i] == 0 && B[i] == 2) sumA++;if(A[i] == 0 && B[i] == 3) sumA++;if(A[i] == 0 && B[i] == 4) sumB++;if(A[i] == 1 && B[i] == 0) sumA++;if(A[i] == 1 && B[i] == 2) sumB++;if(A[i] == 1 && B[i] == 3) sumA++;if(A[i] == 1 && B[i] == 4) sumB++;if(A[i] == 2 && B[i] == 0) sumB++;if(A[i] == 2 && B[i] == 1) sumA++;if(A[i] == 2 && B[i] == 3) sumB++;if(A[i] == 2 && B[i] == 4) sumA++;if(A[i] == 3 && B[i] == 0) sumB++;if(A[i] == 3 && B[i] == 1) sumB++;if(A[i] == 3 && B[i] == 2) sumA++;if(A[i] == 3 && B[i] == 4) sumA++;if(A[i] == 4 && B[i] == 0) sumA++;if(A[i] == 4 && B[i] == 1) sumA++;if(A[i] == 4 && B[i] == 2) sumB++;if(A[i] == 4 && B[i] == 3) sumB++;}cout << sumA << ' ' << sumB;return 0;
}
http://www.xdnf.cn/news/9249.html

相关文章:

  • 调不好分布式锁?HarmonyOS + Redis 分布式锁失效排查全路径
  • Oracle20200714GI_PSU补丁流程及问题收集
  • 一种比较精简的协议
  • python学习day30
  • SSTable(Sorted String Table)结构与用途详解
  • 数据类型(基本类型)day2
  • C-内存函数,动态内存
  • Qt布局连续添加控件
  • Web3怎么本地测试连接以太坊?
  • 封装文档核心知识点总结(通俗版)
  • 利用 MkDocs 和 GitHub 部署个人博客网页
  • LINUX安装运行jeelowcode后端项目(命令行)
  • 【运维自动化-标准运维】如何实现在不同步骤间传递参数
  • 人该怎样活着呢?54
  • 随机模拟专题:第一课
  • 5G网络切片技术:开启网络服务定制化新时代
  • SpringMVC注解、@Controller注解和@RestController注解的区别、@RequestMapper、@PathVariable
  • 制作一款打飞机游戏59:子弹生成
  • DeepSeek 赋能智能安防:从算法革新到场景落地的全解析
  • 4月报 | SeaTunnel支持TDengine的多表Sink功能
  • 机器学习算法-- K 近邻算法(KNN)
  • Linux 资源限制(进程级,用户级,系统级)
  • Debian 11 之使用hostapd与dnsmasq进行AP设置
  • 欧拉定理:若 gcd(a,n)=1,则 a^φ(n)≡1(mod n)。
  • 2025 吉林CCPC
  • 【数据结构】 时间复杂度
  • 浙大版《Python 程序设计》题目集6-3,6-4,6-5,6-6列表或元组的数字元素求和及其变式(递归解法)
  • 前端生成UUID
  • 5.27 打卡
  • 哪些技术要素决定了多媒体数字沙盘的呈现效果与用户体验?