ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Algo_dfs、技巧_TODO

2021-03-30 23:29:23  阅读:274  来源: 互联网

标签:一维 暴力 dfs Algo 数组 ans 1e9 TODO


LINK

给定n个长度为m的一维数组, 问你是否可以找到一个长度为m的ans一维数组
这n个一维数组A[1,2,3…,n],每个都可以在修改<=2个元素后,变成ans
如果可以,输出这个数组ans; 否则输出No
n * m = 1e6, 这n*m个元素 = 【1, 1e9】

1 2 3 4 5     当我们的ans选择 = [1, 2, 1, 2, 5]后
3 4 1 2 5     A[1] A[2] A[3],都可以在修改<=2元素后,变成ans
1 2 6 7 5

1, n*m的范围很大1e6, 而且数值是[1, 1e9] 也很大
	直接暴力肯定是不行的。
	
2, 但也没有适合的其他方法,貌似只有暴力 这一种做法。
	其实很难想到,这个数据规模,居然是可以使用暴力dfs的.....
	当然,很很重要的一点是:  这个问题,确实没有其他优秀的做法,我们就应该往暴力dfs去想

3, 暴力,你肯定第一直觉是想到: 直接对ans暴力dfs
	这肯定是错误的,因为 数据范围这么大,你要暴力到什么时候... 
	I:  很很重要的一点, 如果存在ans的话,ans一定是和A[1] 只有<=2个元素不同。
		能想到这一点,是非常非常重要的!!! 说明,你的思维 是非常有跳跃性的~~~
		' 此时,ans变为(ans枚举所有: 与A[1]只有<=2个不同元素) * n (检查) '
		即:  ( 1 + C[m, 1] + C[m, 2] ) * n )
		这当然也是超时的, 但已经比你直接暴力 要优化的多。
	II: 此时,我们当然需要继续的优化。
		如何优化呢?  (还是要从: A[1]入手)
			但不要再关注,A[1]与ans的关系,因为 我们已经分析过了,这确实是超时的
		而是,我们以A[1]为base,去遍历所有A[2,3,4...n]
		' 即问题转变为: 依次比较A[1] 与 A[2,3,4...n] 的不同元素的个数 '
		'   令这n-1个数为diff[2,3,..,n], diff[5]表示: A[1]与A[5]不同元素的个数
		1, 假如说,diff[2,3,4...n]都是 <= 2的
			那么,我们的ans 就选择A[1]即可!!! (这一点,也非常重要!!!)
		2, 只要存在一个diff是 >= 5的,则一定无解!!
			比如: 	A[1] = [1, 2, 3, 4, 5, 6, 6]
					A[i] = [2, 3, 4, 5, 6, 6, 6]  (有5个是不同的)
			
			
		

	

标签:一维,暴力,dfs,Algo,数组,ans,1e9,TODO
来源: https://blog.csdn.net/weixin_42712593/article/details/115336949

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有