首页 > 其他分享 >田忌赛马/优势洗牌(虽然一个用例超时了,还是记录一下)

田忌赛马/优势洗牌(虽然一个用例超时了,还是记录一下)

时间:2024-11-30 12:57:27浏览次数:6  
标签:田忌赛马 int 王马 用例 nums2 齐王 超时 nums1 田忌

三步:

第一,将齐王的马和田忌的马按速度大小排序

第二、开始一一比较,田忌的马大,齐王的马和田忌的马都到下一匹,齐王的马等于田忌的或者比田忌的大,那就田忌到下一匹马,齐王还是这匹马,田忌的这匹马进垃圾箱(除去齐王已经匹配田忌的马,剩下齐王所有的马这匹马都竞争不过)

第三,找对应关系,排序前的齐王马和排序后的齐王马对应上,然后再对应上田忌的马

class Solution {
    public int[] advantageCount(int[] nums1, int[] nums2) {
        
		
		 int [] garbage = new int [nums1.length];//垃圾箱,存放对比失败的马
		 int [] nums3 = new int [nums1.length];// 负责输出的数组前期用不到
		 int [][] res = new int [nums1.length][2];// 存放双方马的对应关系  res[i][0]存放田忌马,res[i][1]放齐王马
         int [] nums4 = nums2.clone();//克隆一下,记录以前齐王马的排列顺序,以便于后边更好进行比较
		 Arrays.sort(nums1);// 0 1 2 2 4
		 Arrays.sort(nums2);// 0 0 1 2 3
		 int index1 = 0 ;
		 int indexGar = 0;//垃圾箱下表
		 int index3 = 0;
		 int indexRes = 0;
		 for(int i = 0;i<nums1.length;i++) {
			 if(nums1[index1]<=nums2[i]) { 
				garbage[indexGar] = nums1[index1];//比齐王的马垃圾,直接丢垃圾箱
				indexGar++;// 下边增加
				index1++;
				i--;//下次把田忌的马换快一点的,还继续比较齐王的这批马nums2[i]
				if(index1==nums1.length)//田忌没马比了,就跳出循环
					break;
				
			 }
			 else {
                // 比过齐王的马,就记录!!!
				 res[indexRes][0] = nums1[index1];// 
				 res[indexRes][1] = nums2[i];// 
				 indexRes++;
				 index1++;
				 index3++;//也是nums2内的元素
				if(index1==nums1.length)
						break;
					
			 }
		 }
		 indexGar = 0; //清零垃圾箱的下标

		 for(int i = index3;i<nums1.length;i++) {//把垃圾箱里的马倒出来,跟齐王的马匹配(反正必输!!!)
	// index3-1是已经匹配完的马
			res[indexRes][0]= garbage[indexGar];
			res[indexRes][1]  = nums2[i];
			indexRes++;
			indexGar++;
		 }
         // 找对应关系,num4 正是对应原来齐王的排列顺序
for(int i =0;i<nums1.length;i++) {
	for(int j =0;j<nums1.length;j++) {
		if(res[i][1]==nums4[j])// 直接等于,这里不存在匹配错的问题,因为速度一样默认是同一个马
		{
			nums3[j] = res[i][0];
		    nums4[j] = -1;
			break;
		}
	}
}
	return nums3;
	}
    }

 还是超时,欢迎有大佬提出改进意见,谢谢。

标签:田忌赛马,int,王马,用例,nums2,齐王,超时,nums1,田忌
From: https://blog.csdn.net/qq_62691586/article/details/144145625

相关文章

  • 【优化】-审批任务候选人提取超时
    背景低代码审批流在创建审批任务时需要为审批任务分配审批人,在配置审批人的时候,可以选择不同维度的身份,如用户、岗位、角色、组织,可以同时配置多个维度,每个维度的结果取交集。在这个基础上还可以根据运行时环境不同选择不同组织下的用户,例如当前登录组织的上n级或者下n级,也可以......
  • ping请求超时是为什么?怎么解决
    Ping请求是一种网络工具发出的指令,主要用于测试本地设备与目标网络设备(如服务器、另一台计算机等)之间的连通性,通过向目标设备发送ICMP(InternetControlMessageProtocol,互联网控制消息协议)回声请求数据包,并等待接收目标设备返回的回声应答数据包来判断网络连接是否正常、测量往......
  • 优雅的实现超时连接Task
    TimeoutHelper帮助类以下是一个封装方法的实现,它接受一个Action或Func委托和一个超时时间(以毫秒为单位)。如果委托在指定的时间内执行完成,返回true;否则返回false:usingSystem;usingSystem.Threading;usingSystem.Threading.Tasks;publicstaticclassTimeoutHelper......
  • [AirTest] airtest-selenium做Web自动化测试(上手实操三)&& airtest 代码改写成用 Djang
            经过了实操二的 测试用例复用(循环) 的实现,现对其进行改造提升优化。        实操一让我们知道了如何做单个测试用例的 自动化测试,实操二让我们知道了如何做多个测试用例的 自动化测试,那么,如何把实操二写的脚本变成更方便的测试脚本,让多个测试用例......
  • [AirTest] airtest-selenium做Web自动化测试(上手实操二)&& 如何让其实现测试用例复用(循
        经过了实操一的 初步Web自动化测试 的实现,现对其进行改造提升优化。        实操一让我们知道了如何做单个测试用例的自动化测试,那么如何实现多个测试用例的自动化测试呢?实操一快速通道:  [AirTest]airtest-selenium做Web自动化测试(上手实操一)&&如......
  • 阿里云服务器smtp.exmail.qq.com:25端口访问超时的解决办法
    错误原因:阿里云服务器默认关闭25端口以防止垃圾邮件。解决办法:在阿里云控制台的安全组规则中添加25端口。如果仍然无法连接,尝试使用465端口并通过SSL加密。修改邮件发送设置,将SMTP端口改为465并开启SSL。QQ企业邮箱端口配置:POP3/SMTP协议:接收邮件服务器:pop.exmail.qq......
  • python将Xmind用例转为Excel用例
     代码:#coding=utf-8importxlwtfrompast.builtinsimportraw_inputfromxmindparserimportxmind_to_dictdefresolvePath(dict,lists,title):#title去除首尾空格title=title.strip()#如果title是空字符串,则直接获取valueiflen(title)......
  • 青训营 X 豆包MarsCode 技术训练营--小C的外卖超时判断
    题目小C点了一个外卖,并且急切地等待着骑手的送达。她想知道她的外卖是否超时了。已知小C在时刻t1点了外卖,外卖平台上显示的预计送达时间为t2,而实际送达时间为t3。需要判断外卖是否超时。如果外卖超时,则输出“Yes”;否则输出“No”。实际送达时间与预计送达时间在2......
  • Docker 用例:15 种最常见的 Docker 使用方法
    容器化应用程序而不是将它们托管在虚拟机上是过去几年一直流行的概念,使容器管理流行起来。Docker处于这一转变的核心,帮助组织无缝地采用容器化技术。最近,Docker用例遍布所有行业,无论规模大小和性质如何。什么是Docker?Docker是一种容器化技术,它使开发人员能够将服务及其依......
  • 1-3.Retrofit 异常请求清单(404 请求、超时请求、连接失败请求)
    Retrofit1、Retrofit概述Retrofit是一个网络请求库,专门用于发送HTTP请求和处理HTTP响应2、Retrofit引入在AndroidManifest.xml文件中添加相关权限,如果是Android6.0(API级别23)或之后,需要在运行时请求<uses-permissionandroid:name="android.permission.INT......