京东烽火台编程交流

/**
*做题的时候看题目看乱了,结束后才在牛客网友提示下明白了题目意思,明白意思后第一感觉是动态规划,于是用动态规划试着实现了一下
*思路:利用一个m*m矩阵,m[i][j]表示arr[i] 、arr[j](即小山i、j能否通信)能否配对,能配对值为1,否则为0
*最后累加矩阵的值除以2得到结果,时间复杂度为O(n^2)
*具体注释如下
*在此感谢左程云老师,关于这方面的知识是在他的公开课上学的
*/
public int getCount(int[] arr) {
	if (arr == null || arr.length < 2) {
		return 0;
	} else {
		int res = 0;
		int[][] dp = getDP(arr);
		for (int i = 0; i < dp.length; i++) {
			for (int j = 0; j < dp.length; j++) {
				res += dp[i][j];
			}
		}
		return res / 2;
	}
}

public int[][] getDP(int[] arr) {
	int[][] dp = new int[arr.length][arr.length];
	dp[0][arr.length - 1] = 1;  //头尾是相邻的,配对
	dp[arr.length - 1][0] = 1;
	for (int i = 0; i < dp.length; i++) {
		for (int j = 0; j < dp.length; j++) {
			if(dp[i][j] == 0){
				if(i == j){
					dp[i][j] = 0;   //自己跟自己不配对
				}else if (i == j - 1 || j == i - 1) {
					dp[i][j] = 1;   //相邻的配对
				} else {
                                        //如果dp[i][j-1]为1,则arr[j-1]满足arr[j - 1] <= Math.min(arr[i], arr[j])使arr[i]、arr[j]配对
					if (j > 0 && dp[i][j - 1] == 1
							&& arr[j - 1] <= Math.min(arr[i], arr[j])) {
							dp[i][j] = 1;
					}
                                        //如果dp[i-1][j]为1,则arr[i-1]满足arr[i - 1] <= Math.min(arr[i], arr[j])使arr[i]、arr[j]配对
					if (i > 0 && dp[i - 1][j] == 1
							&& arr[i - 1] <= Math.min(arr[i], arr[j])) {
						dp[i][j] = 1;
					}
				}
			}
		}
	}
	return dp;
}

#京东#
全部评论
难道不应该只是一个上三角就可以了?
点赞 回复 分享
发布于 2016-09-05 23:39
贴个java的 public int GetCount(ArrayList<Integer> list) { if (list == null) { return 0; } int count = 0, len = list.size(); for (int i = 0; i < len; i++) { int max; count++; if (list.get(i) > list.get(i + 1)) { max = list.get(i+1); for (int j = i + 1; j < i + len - 1 && max<list.get(i); j++) { if (max < list.get(j + 1)) { count++; max = list.get(j + 1); } else { break; } } } list.add(list.get(i)); } return count; }
点赞 回复 分享
发布于 2016-09-06 13:06
然而m的范围是10^6。二维内存会爆 但是神奇的是N^2的算法直接AC了
点赞 回复 分享
发布于 2016-09-05 22:55

相关推荐

行云流水1971:这份实习简历的优化建议: 结构清晰化:拆分 “校园经历”“实习经历” 板块(当前内容混杂),按 “实习→校园→技能” 逻辑排版,求职意向明确为具体岗位(如 “市场 / 运营实习生”)。 经历具象化:现有描述偏流程,需补充 “动作 + 数据”,比如校园活动 “负责宣传” 可加 “运营公众号发布 5 篇推文,阅读量超 2000+,带动 300 + 人参与”;实习内容补充 “协助完成 XX 任务,效率提升 X%”。 岗位匹配度:锚定目标岗位能力,比如申请运营岗,突出 “内容编辑、活动执行” 相关动作;申请市场岗,强化 “资源对接、数据统计” 细节。 信息精简:删减冗余表述(如重复的 “负责”),用短句分点,比如 “策划校园招聘会:联系 10 + 企业,组织 200 + 学生参与,到场率达 85%”。 技能落地:将 “Office、PS” 绑定经历,比如 “用 Excel 整理活动数据,输出 3 份分析表;用 PS 设计 2 张活动海报”,避免技能单独罗列。 优化后需强化 “经历 - 能力 - 岗位需求” 的关联,让实习 / 校园经历的价值更直观。 若需要进一步优化服务,私信
实习,投递多份简历没人回...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务