js区间算法

sx2asdf31415 2017-05-09 10:13:50
var obj = [{ ms: "8:00", me: "9:00" }, { ms: "10:00", me: "15:00" }, { ms: "10:30", me: "16:00" }, { ms: "11:30", me: "14:00" }, { ms: "15:30", me: "16:30" }, { ms: "17:30", me: "19:00" }]

var obj1=[{ ms: "8:00", me: "11:00" }, { ms: "10:00", me: "15:00" },{ ms: "12:00", me: "15:00" }]

var obj2=[{ ms: "8:00", me: "10:00" }, { ms: "9:00", me: "11:00" },{ ms: "10:00", me: "12:00" },{ ms: "11:00", me: "13:00" },{ ms: "12:00", me: "14:00" }];

var obj3=[{ ms: "8:00", me: "10:00" }, { ms: "9:00", me: "11:00" },{ ms: "12:00", me: "14:00" },{ ms: "15:00", me: "16:00" },{ ms: "17:00", me: "19:00" },{ ms: "18:00", me: "20:00" }]

这样四组数据要一个方法
function getArr(arr){ return ???}
时间重合的对应的有几个分别是那几个

返回这样的数组,怎么做,求大神结局给思路
//[1,4,4,4,41]
//[3,3,3]
//[5,5,5,5,5]
//[2,2,1,1,2,2]
...全文
389 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
cn00439805 2017-05-09
  • 打赏
  • 举报
回复
按你需求的描述,就应该是这个结果,而非你描述的结果
cn00439805 2017-05-09
  • 打赏
  • 举报
回复
你的运算是错误的
sx2asdf31415 2017-05-09
  • 打赏
  • 举报
回复

1楼 首先谢谢你谢了这么多
你代码我运行出来的结果如图
和我期待的结果数组不同
//[1,4,4,4,4,1]
//[3,3,3]
//[5,5,5,5,5]
//[2,2,1,1,2,2]
qq_36832844 2017-05-09
  • 打赏
  • 举报
回复
public class Test { public static void main(String[] args) { int[] nums={1,5,7,8,56,487,874,414,5}; Sorts(nums); } public static void Sorts(int[] nums){ int a; for(int i=0;i<nums.length;i++){ for(int j=0;j<nums.length;j++){ if(nums[j]<nums[i]){ a=nums[i]; nums[i]=nums[j]; nums[j]=a; } } } for(int b:nums){ System.out.print(b+","); } } }
cn00439805 2017-05-09
  • 打赏
  • 举报
回复

var obj = [{ ms: "8:00", me: "9:00" }, { ms: "10:00", me: "15:00" }, { ms: "10:30", me: "16:00" }, { ms: "11:30", me: "14:00" }, { ms: "15:30", me: "16:30" }, { ms: "17:30", me: "19:00" }];
var obj1=[{ ms: "8:00", me: "11:00" }, { ms: "10:00", me: "15:00" },{ ms: "12:00", me: "15:00" }]
var obj2=[{ ms: "8:00", me: "10:00" }, { ms: "9:00", me: "11:00" },{ ms: "10:00", me: "12:00" },{ ms: "11:00", me: "13:00" },{ ms: "12:00", me: "14:00" }];
var obj3=[{ ms: "8:00", me: "10:00" }, { ms: "9:00", me: "11:00" },{ ms: "12:00", me: "14:00" },{ ms: "15:00", me: "16:00" },{ ms: "17:00", me: "19:00" },{ ms: "18:00", me: "20:00" }]
function getArr(arr){
	var result = [],copy;
	for(var i = 0,o;o = arr[i];i++){
		copy = arr.concat([]);
		copy.splice(i,1);
		result.push(getNum(o,copy));
	}
	return result;
}
function getNum(obj,arr){
	var n = 1;
	for(var i = 0,o;o = arr[i];i++){
		if(isCross(obj,o)){
			n++;
		}
	}
	return n;
}
function isCross(o1,o2){
	var ms1 = trans(o1.ms), me1 = trans(o1.me), ms2 = trans(o2.ms), me2 = trans(o2.me);
	if(me1 < ms2 || ms1 > me2){
		return false;
	}
	return true;
}
function trans(str){
	var arr = str.split(":");
	return parseInt(arr[0]) + parseFloat(arr[1]/60);
}
console.log(getArr(obj),getArr(obj1),getArr(obj2),getArr(obj3));
sx2asdf31415 2017-05-09
  • 打赏
  • 举报
回复
图上的例子是有五个会议 因为第一个会议和其他四个会议时间都没有重合,所以第一个会议占满格; 第二,三,四个会议时间有重合,所以二,三,四,各占满格的三分之一; 第五个会议和他们前四个会议也没有重合,所以第五个会议也占满格; 这样下来返回的 arr=[1,3,3,3,1] 看规律 第一个占满格,所以是arr[0]是1 二,三,四占三分之一,所以arr[1],arr[2],arr[3]是3 第五个占满格。所以arr[4]是1 arr的length跟会议的数量肯定是一样的 不知道这样写能看明白不
cn00439805 2017-05-09
  • 打赏
  • 举报
回复
还是看不懂,
灿尔哈擦苏 2017-05-09
  • 打赏
  • 举报
回复
说的太含糊了
sx2asdf31415 2017-05-09
  • 打赏
  • 举报
回复
1楼

针对图片就是
第一个会议占一格(也就是满格)
第二个会议,三,四 占三分之一
第五个会议占满格
所以 要的数组就是
//arr=[1,3,3,3,1
]
cn00439805 2017-05-09
  • 打赏
  • 举报
回复
没看懂表述,能不能再说清楚点
sx2asdf31415 2017-05-09
  • 打赏
  • 举报
回复
function getNum(json){ var arr = [],arr1=[0],arr2=[]; var start1, end1, start2,end2; var cont=0;//重复的个数 var clone_arr=[]; var num=[]; var clone_index=[]; if (json.length === 1) { arr = [1]; }else{ for (var i = 0; i <json.length; i++) { if(i!==0){ if(i<=cont){ continue } } start1 = Number(json[i].ms.split(':').join('')); end1 = Number(json[i].me.split(':').join('')); num=[start1,end1]; for (var j = i+1; j < json.length; j++) { start2 = Number(json[j].ms.split(':').join('')); end2=Number(json[j].me.split(':').join('')); if ( start2 < num[1]) { if(end2>num[1]){ num[1]=end2; } cont=j } } clone_arr.push(num) } //console.log(clone_arr) if(clone_arr.length===1){ for(var x=0;x<json.length;x++){ arr[x]=json.length; } }else{ for(var y=0;y<clone_arr.length;y++){ var t=0; for(var z=0;z<json.length;z++){ start2 = Number(json[z].ms.split(':').join('')); end2=Number(json[z].me.split(':').join('')); if(clone_arr[y][0]<=start2&&clone_arr[y][1]>=end2){ t++ } } clone_index.push(t); } for(var a=0;a<clone_index.length;a++){ //var arr1=''; if(clone_index[a]!==1){ for(var b=0;b<clone_index[a];b++){ arr.push(clone_index[a]) } }else{ arr.push(1) } } } //console.log(clone_index); } var o=0; for(var p=1;p<arr.length;p++){ if(arr[p]===1){ arr1.push(0); o=0 }else if(arr[p]===arr[p-1]){ o++; arr1.push(o); }else{ arr1.push(0); o=0 } } console.log(arr1) arr2.push(arr,arr1); return arr2 }
sx2asdf31415 2017-05-09
  • 打赏
  • 举报
回复
function getNum(json){ var arr = [],arr1=[0],arr2=[]; var start1, end1, start2,end2; var cont=0;//重复的个数 var clone_arr=[]; var num=[]; var clone_index=[]; if (json.length === 1) { arr = [1]; }else{ for (var i = 0; i <json.length; i++) { if(i!==0){ if(i<=cont){ continue } } start1 = Number(json[i].ms.split(':').join('')); end1 = Number(json[i].me.split(':').join('')); num=[start1,end1]; for (var j = i+1; j < json.length; j++) { start2 = Number(json[j].ms.split(':').join('')); end2=Number(json[j].me.split(':').join('')); if ( start2 < num[1]) { if(end2>num[1]){ num[1]=end2; } cont=j } } clone_arr.push(num) } //console.log(clone_arr) if(clone_arr.length===1){ for(var x=0;x<json.length;x++){ arr[x]=json.length; } }else{ for(var y=0;y<clone_arr.length;y++){ var t=0; for(var z=0;z<json.length;z++){ start2 = Number(json[z].ms.split(':').join('')); end2=Number(json[z].me.split(':').join('')); if(clone_arr[y][0]<=start2&&clone_arr[y][1]>=end2){ t++ } } clone_index.push(t); } for(var a=0;a<clone_index.length;a++){ //var arr1=''; if(clone_index[a]!==1){ for(var b=0;b<clone_index[a];b++){ arr.push(clone_index[a]) } }else{ arr.push(1) } } } //console.log(clone_index); } var o=0; for(var p=1;p<arr.length;p++){ if(arr[p]===1){ arr1.push(0); o=0 }else if(arr[p]===arr[p-1]){ o++; arr1.push(o); }else{ arr1.push(0); o=0 } } console.log(arr1) arr2.push(arr,arr1); return arr2 } 我弄出来了 arr[0]就是要的数组, 希望有更好的算法可以发帖

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧