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

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

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

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;
}

相关文章:

  • VectorNet:自动驾驶中的向量魔法
  • fabric 是一个开源框架,用于使用 AI 增强人类能力。它提供了一个模块化框架,用于使用一组可在任何地方使用的众包人工智能提示来解决特定问题
  • 关于CSDN和Github的操作
  • 安卓证书的申请(保姆级图文)
  • 基于递归思想的系统架构图自动化生成实践
  • 电子信息科学与技术专业生涯规划书-嵌入式方向(大一下)
  • 计算机组成原理:IEEE 754标准
  • Linux Shell 切换
  • 建筑八大员劳务员考试题及答案解析
  • 今日行情明日机会——20250527
  • 3.8.4 利用RDD实现分组排行榜
  • 国产化Word处理控件Spire.Doc教程:在 C# 中打印 Word 文档终极指南
  • C-自定义类型
  • 机器学习知识体系:从“找规律”到“做决策”的全过程解析
  • YoloV11改进策略:卷积篇-风车卷积-即插即用
  • RK3568DAYU开发板-平台驱动开发:ADC驱动
  • vpt_denoise
  • Python实例题:使用Python定制词云
  • Linux系统入门篇三
  • 流量红利的破局之道—深度解析OPPO应用商店 CPD广告运营
  • 苏州网站建设设计/他达拉非的副作用和危害
  • 有哪些做电子商务的网站/上海seo网站推广
  • 企业购 网站建设/网页在线生成
  • 上海高端品牌网站建设/张北网站seo
  • 网站建设维护公司资质/品牌策划ppt案例
  • 太原建站模板系统/优化网络搜索引擎