分享两道算法题

news2024/9/22 19:08:40

分享两道算法题


王者荣耀分组

题目描述
部门准备举办一场王者荣耀表演赛,有 10 名游戏爱好者参与,分 5 为两队,每队 5 人。
每位参与者都有一个评分,代表着他的游戏水平。
为了表演赛尽可能精彩,我们需要把 10 名参赛者分为实力尽量相近的两队。一队的实力可以表示为这一队 5 名队员的评分总和。
现在给你 10 名参与者的游戏水平评分,请你根据上述要求分队最后输出这两组的实力差绝对值。
例: 10 名参赛者的评分分别为 5 1 8 3 4 6 7 10 9 2,分组为 (1 3 5 8 10) (2 4 6 7 9),两组实力差最小,差值为 1。有多种分法,但实力差的绝对值最小为 1。

输入描述
10 个整数,表示 10 名参与者的游戏水平评分。范围在[1,10000]之间

输出描述
1 个整数,表示分组后两组实力差绝对值的最小值。

示例一
输入

1 2 3 4 5 6 7 8 9 10
输出
1
说明

10 名队员分成两组,两组实力差绝对值最小为 1

基于C语言的代码:

#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
int total = 0;
int res = INT_MAX;
// 深度优先搜索函数
void dfs(int score[10], int idx, int count, int currentSum) {
    // 当我们为一个队伍选择了5名玩家时
    if (count == 5) {
        // 计算另一个队伍的总和
        int otherTeamSum = total - currentSum;
        // 用较小的差值更新结果
        res = abs(currentSum - otherTeamSum) < res
                  ? abs(currentSum - otherTeamSum)
                  : res;
        return;
    }
    // 如果我们已经考虑了所有玩家,停止递归
    if (idx == 10) {
        return;
    }
    // 为第一个队伍选择当前玩家
    dfs(score, idx + 1, count + 1, currentSum + score[idx]);
    // 不为第一个队伍选择当前玩家
    dfs(score, idx + 1, count, currentSum);
}
int main() {
    int score[10];
    for (int i = 0; i < 10; i++) {
        scanf("%d", &score[i]);
        total += score[i];
    }

    dfs(score, 0, 0, 0);
    printf("%d", res);
    return 0;
}

注意: <limits.h>
<limits.h> 是 C 语言的一个标准库头文件,它定义了各种数据类型(如整数、浮点数等)的最小和最大可能值。在程序中包含 <limits.h> 头文件后,可以使用预定义的宏来访问这些值。

例如,在给定的代码片段中,INT_MAX 就是来自 <limits.h> 的一个预定义宏,表示 int 类型的最大值。这个宏在初始化变量 res 时被用作初始的最大可能实力差:
int res = INT_MAX;

通过这样的方式,我们可以确保 res 被初始化为一个足够大的数值,以便在后续计算中能够容纳任何可能出现的实力差,并能够在遍历所有分组方案后更新到真正的最小实力差。

基于Python的代码求解

import sys

res = sys.maxsize
sum = 0
tarsum = 0
#global sum, res:声明sum和res为全局变量,这样在dfs函数内部可以访问和修改它们。
# cursum是当前队伍的总得分

def dfs(mylist,id,count,cursum):
    global sum,res,trasum
    
    
    if count == 5:
        othersum = sum - cursum
        res = min(res,abs(cursum - othersum))
        return
    # id 记录了全部玩家的情形,id等于10则停止递归
    if id == 10:
        return
    #选择当前队伍的玩家
    dfs(mylist,id+1,count+1,cursum+mylist[id])
    #另一个队伍的玩家
    dfs(mylist,id+1,count,cursum)

mylist = list(map(int, input().split(' ')))
for i in mylist:
    sum += i
    
trasum = sum // 2
dfs(mylist,0,0,0)
print(res)

最大括号深度

在这里插入图片描述
在这里插入图片描述

基于python代码求解

#定义栈

strings = input()
def depth(s):
    if not s:
        return 0
    stack = []
    maxdepth = 0
    for i ,c in enumerate(s):
        if c in '({[':
            stack.append(c)
            maxdepth = max(maxdepth,len(stack))
        else:
            if not stack:
                break
            if(c==')' and stack[-1]=='(') or \
              (c=='}' and stack[-1]=='{') or \
              (c==']' and stack[-1]=='[') :
                stack.pop()
            else:
                break
    return maxdepth if not stack else 0
               
print(depth(strings))        
    
    

或者更简单的写法:


s = input()
 
def getResult():
    map = {
        ")": "(",
        "]": "[",
        "}": "{"
    }
 
    stack = []
 
    for c in s:
        if stack and map.get(c) == stack[-1]:
            stack.pop()
        else:
            stack.append(c)
 
    if stack:
        return 0
 
    return len(stack)
 
print(getResult())

总结:

以上两道算法题第一道用到了深度优先搜索的思想,题目想要得到一个使得两队的实力差距最小的分组方案,我们利用了深度优先搜索的思想,将队员i加入第一个队代表向前走,不加入代表选择其他路径;最终深度优先搜索代码遍历了所有可能的分配方案,并通过我们定义的参数res返回了最佳分配方案的两队实力差距。而第二题很明显要用到栈的思想,python中列表的添加元素和删除末尾元素成功模拟了入栈和出栈的过程,当栈中上一个元素的对应括号出现时,则出栈,否则入栈,最终将记录到的栈的最大长度输出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2155704.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

十七,Spring Boot 整合 MyBatis 的详细步骤(两种方式)

十七&#xff0c;Spring Boot 整合 MyBatis 的详细步骤(两种方式) 文章目录 十七&#xff0c;Spring Boot 整合 MyBatis 的详细步骤(两种方式)1. Spring Boot 配置 MyBatis 的详细步骤2. 最后&#xff1a; MyBatis 的官方文档&#xff1a;https://mybatis.p2hp.com/ 关于 MyBa…

内网渗透-红日1

红日靶场1 渗透测试过程外网打点突破边界内网横向权限维持最后 渗透测试过程 本文章只说明渗透测试思路和技巧&#xff0c;对域靶场搭建不进行赘述 web-ip外网设置为 192.168.119.130&#xff0c;kali和外网ip同网段 外网打点 kali扫描目标ip nmap扫描目标网段   nmap -P…

【记录】大模型|Windows 下 Hugging Face 上的模型的通用极简调用方式之一

这篇文是参考了这篇&#xff0c;然后后来自己试着搭了一下&#xff0c;记录的全部过程&#xff1a;【翻译】Ollama&#xff5c;如何在 Ollama 中运行 Hugging Face 中的模型_ollama 导入 huggingface-CSDN 博客 另外还参考了这篇&#xff1a;无所不谈,百无禁忌,Win11 本地部署无…

【C++初阶】探索STL之——vector

【C初阶】探索STL之——vector 1.什么是vector2.vector的使用2.1 vector的定义2.2 vector iterator(迭代器)的使用2.3 vector空间问题2.4 vector的增删查改2.5 vector迭代器失效的问题2.5.1 vector常见迭代器失效的操作 3 动态二位数组 1.什么是vector vector其实就是一个可以…

iPhone16,超先进摄像头系统?丝滑的相机控制

iPhone 16将于9月20号正式开售&#xff0c;这篇文章我们来看下iPhone 16 在影像方面&#xff0c;有哪些升级和新feature。 芯片&#xff1a;采用第二代 3纳米芯片&#xff0c;A18。 摄像头配置&#xff1a; iPhone 16 前置&#xff1a;索尼 IMX714 &#xff0c;1200 万像素&am…

SQL 多表联查

目录 1. 内联接&#xff08;INNER JOIN&#xff09; 2. 左外联接&#xff08;LEFT JOIN&#xff09; 3. 右外联接&#xff08;RIGHT JOIN&#xff09; 4. 全外联接&#xff08;FULL JOIN&#xff09; 5. 交叉联接&#xff08;CROSS JOIN&#xff09; 6. 自联接&#xff0…

简单题101. 对称二叉树 (python)20240922

问题描述&#xff1a; python: # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right rightclass Solution(object):def isSymm…

网络通信——OSI七层模型和TCP/IP模型

OSI模型 一.OSI七层模型 OSI&#xff08;Open System Interconnect&#xff09;七层模型是一种将计算机网络通信协议划分为七个不同层次的标准化框架。每一层都负责不同的功能&#xff0c;从物理连接到应用程序的处理。这种模型有助于不同的系统之间进行通信时&#xff0c;更…

pycharm连接远程linux服务器上的docker进行深度学习训练

实习过程中由于GPU都在服务器上&#xff0c;编辑代码很麻烦。并且服务器上配置了docker的环境&#xff0c;所以用pycharm连接远程服务器的docker进行深度学习&#xff0c;这样在本地调用远程服务器的GPU和环境&#xff0c;更方便一点&#xff0c;将这个过程记录下来&#xff0c…

如何将MySQL卸载干净(win11)

相信点进来的你肯定是遇到了这个问题&#xff0c;那就是在安装MySQL的时候操作错误&#xff0c;最后结果不是自己想要的。卸载重新安装又发现安装不了。其实最主要的原因就是没有将MySQL卸载干净&#xff0c;那么如何把MySQL卸载干净&#xff1f;下面本篇文章就来给大家一步步介…

【C++】二叉搜索树的底层以及实现

个人主页 文章目录 ⭐一、二叉搜索树的概念&#x1f680;二、二叉搜索树性能分析&#x1f3dd;️三、二叉搜索树的操作1. 插入2. 查找3. 删除4. 遍历节点 &#x1f384;四、二叉搜索树的实现&#xff08;K模型&#xff09;&#x1f389;五、二叉搜索树的应用1. K模型2. KV模型…

14. PEFT:在大模型中快速应用 LoRA

如果你对LoRA还没有一个直观的概念&#xff0c;可以回看这篇文章&#xff1a;《3. 认识 LoRA&#xff1a;从线性层到注意力机制》。 我们将在这里进一步探讨如何快速地在大型预训练模型中应用 LoRA&#xff0c;并解答可能存在的问题&#xff0c;包括&#xff1a; peft 和 lora …

NSSCTF刷题篇1

js类型 [SWPUCTF 2022 新生赛]js_sign 这是一道js信息泄露的题目直接查看源码&#xff0c;有一个main.js文件点击之后&#xff0c;有一串数字和一段base64编码&#xff0c;解开base64编码得到这个编码为敲击码 解码在线网站&#xff1a;Tap Code - 许愿星 (wishingstarmoye.…

828华为云征文|华为云Flexus云服务器X实例之openEuler系统下部署k8s管理面板KubePi

828华为云征文&#xff5c;华为云Flexus云服务器X实例之openEuler系统下部署k8s管理面板kubepi 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、 KubePi介绍2.1 KubePi简介2.2 KubePi主要特点&am…

序列化方式二——JSON之Gson

Gson 1、什么是Gson? Gson是Google提供的一个用于Java编程语言的JSON&#xff08;JavaScript Object Notation&#xff09;序列化和反序列化库。它允许开发者在Java对象和JSON数据之间进行高效的映射和转换。 官网地址&#xff1a;https://github.com/google/gson 官网文档…

小程序隐私合规自查指南

一 背景&#xff1a;小程序作为一种轻量级应用&#xff0c;广泛应用于各大互联网平台。工信部通报2022年第5批侵害用户权益名单中首次出现8款违规小程序。各监管单位对“小程序”违规收集个人信息监控手段和监控力度不断加强。 工信部APP违法违规通报 上海市委网信办查处违规小…

Python_控制循环语句

if语句单分支结构的语法形式如下&#xff1a; 【操作】输入一个数字&#xff0c;小于10&#xff0c;则打印这个数字(if_test01.py)&#xff1a; num input("输入一个数字&#xff1a;") if int(num)<10: print("小于10的数&#xff1a;"num)条件表达式…

BOE(京东方)携多场景物联网创新应用亮相2024服贸会 “屏之物联”赋能数字经济

9 月 12 日&#xff0c;以“全球服务 互惠共享”为主题的2024中国国际服务贸易交易会&#xff08;以下简称“服贸会”&#xff09;在北京拉开帷幕。作为领先的物联网创新企业&#xff0c;BOE&#xff08;京东方&#xff09;携智慧办公、智慧商显、智能车载、智慧教育、智能工厂…

设计模式例题

答案&#xff1a;D C A D 知识点&#xff1a; 观察者模式的意图&#xff1a;定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖它的对象都得到通知并被自动更新&#xff0c;和自媒体很相似&#xff0c;自媒体更新内容&#xff0c…

C++--C++11(下)

目录 7.5 完美转发 8 新的类功能 9 可变参数模板 10 lambda表达式 11 包装器 7.5 完美转发 模板中的 && 万能引用 void Fun(int &x){ cout << "左值引用" << endl; } void Fun(const int &x){ cout << "const 左值引用…