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

华为OD机试真题C卷-篇3

文章目录

  • 查找一个有向网络的头节点和尾节点
  • 幼儿园篮球游戏

查找一个有向网络的头节点和尾节点

  • 在一个有向图中,有向边用两个整数表示,第一个整数表示起始节点,第二个整数表示终止节点;
  • 图中只有一个头节点,一个或者多个尾节点;
  • 图可能存在环,有环则输出-1;
  • 输出图中的头节点(入度为0)、尾节点(出度为0),如图头节点为1,尾节点为4。
    在这里插入图片描述
    输入描述:
    第一行输入n,n >=0
    第二行为n个数对,表示n条边;
    输出描述:
    输出一行,头节点、尾节点以空格隔开,多个尾节点则从大到小输出。
     
    示例1
    输入:
    4
    1 2 1 3 2 4 3 4
    输出:
    1 4

思路:

  • 拓扑排序,判断有向图是否有环,有环则直接输出-1;
  • 只有一个起始点,一个或多个结尾点;
relations = {}
indegree = {}
head = -1
tails = []
 
def find_head():
    global relations,indegree,head
    for  keys in relations:
        if (keys in indegree) :
            continue
        else :
            head = keys
            break
 
def find_tails():
    global relations,indegree,tails
    for keys in indegree :
        if (keys in relations) :
            continue
        else :
            tails.append(keys)
 
n = int(input())
nums = [int(x) for x in input().split(" ")]
        
i=0
while(i < 2 * n):
    if(nums[i] in relations):
        relations[nums[i]].append(nums[i + 1])
    else :
        relations[nums[i]] = []
        relations[nums[i]].append(nums[i + 1])
    
 
    if(nums[i + 1] in indegree):
        indegree[nums[i + 1]] += 1
    else :
        indegree[nums[i + 1]] = 1
    i += 2
    
 
find_head()
find_tails()
tails.sort()
 
queue = []
queue.append(head)
while (True) :
    if(len(queue)<=0):
        break
    else :
        temp = queue[0]
        queue.pop(0)
        if(temp in relations):
            temp_list = relations[temp]
            for  x in temp_list:
                indegree[x]= indegree[x] - 1
                if (indegree[x] == 0) :
                    queue.append(x)
flag = 1
for key in indegree:
    
    if (indegree[key] > 0) :
        flag = 0
 
if (flag==0) :
    print(-1)
else: 
    output_str = str(head) + " "
    for x in tails:
        output_str += str(x) + " "
 
    print(output_str[:-1])

 

幼儿园篮球游戏

在这里插入图片描述
在这里插入图片描述
双指针+ 线性表

import functools
import sys
import copy
import re
import math
 
nums = [int(x) for x in input().split(",")]
target_nums = [int(x) for x in input().split(",")]
 
arr = [float('inf') for i in range(300)]
 
left = 0
right = 0
target_pos = 0
 
result = ""
i=0
while(True):
    if(i>=len(nums)):
        break
    else :
        arr[right] = nums[i]
        right+=1
        while (True) :
            if(right <= left):
                break
            else :
                if (arr[left] == target_nums[target_pos]) :
                  result += "L"
                  left += 1
                  target_pos += 1
                  continue
                elif (arr[right-1] == target_nums[target_pos]) :
                  result += "R"
                  right -= 1
                  target_pos += 1
                  continue
                 
                break
    i+=1
 
if (left != right) :
  print("NO")
else :
  print(result)
 

http://www.kler.cn/a/230210.html

相关文章:

  • Leffa 虚拟试衣论文笔记
  • STM32-笔记35-DMA(直接存储器访问)
  • 【UI自动化测试】selenium八种定位方式
  • 【C++面向对象——类的多态性与虚函数】编写教学游戏:认识动物(头歌实践教学平台习题)【合集】
  • 深入刨析数据结构之排序(上)
  • 【HarmonyOS-ArkTS语言】面向对象【合集】
  • OS X(MACOS) C/C++ 程序链接静态库限制。
  • 2023-总结
  • LeetCode 丑数
  • 【实验3】统计某电商网站买家收藏商品数量
  • 企业微信会话存档:大文件拉取、加密、上传
  • (十三)springboot实战——springboot前后端分离方式项目集成spring securtity安全框架
  • 23种设计模式之工厂模式
  • 【Java安全】ysoserial-URLDNS链分析
  • 为什么说不可知论有合理的成分
  • 【Java基础常见面试题】- Java SE vs Java EE
  • 如何启动若依框架
  • LeetCodeLCR 114. 火星词典——拓扑排序
  • 【Scala 】3. 类和对象
  • Linux(三)--文件系统
  • linux中的gdb调试
  • 【Spring Boot】第一篇 创建简单的Spring Boot项目
  • [基础IO]文件描述符{重定向/perror/磁盘结构/inode/软硬链接}
  • homeword_day1
  • 高清符合要求的SCI图片使用RStudio导出
  • NLP_循环神经网络(RNN)