我最近在编码面试中被问到这个问题。我用HH:MM格式给了我一系列的时间。我需要找到最小的时差,以分钟为单位。时间本质上是循环的,因此23:55和00:12应该有17的差异。函数也需要处理00:00与24:00相同(这是最简单的部分,当然)。 有人可以帮助我解决问题。
答案 0 :(得分:5)
首先将所有时间转换为分钟(HH * 60 + MM)。然后对该数字列表进行排序。现在,您可以浏览该列表并从下一个列表中减去每个时间。在该循环结束时,您必须从第一个+ 1440中减去最后一个。
答案 1 :(得分:0)
首先将时间转换为分钟。减去较大的时间和较小的时间以获得第一个差异。然后将24小时即1440分钟添加到较小的时间并再次减去时间。正确的答案是哪个差异较小。两个区别是前向和后向差异所需。
答案 2 :(得分:0)
你可以试试像贝洛:
import java.util.Arrays;
public class Main {
public static void main(String args[]) {
String times[] = {"2:30","00:00", "00:12", "24:00", "23:55"};/*input times*/
int countTime = times.length;
int sortedTimes[] = new int[countTime];/*will hold sorted times*/
for (int i = 0; i < countTime; i++) {/*convert 'HH:mm' to integer minute*/
int t = Integer.valueOf(times[i].split(":")[0])*60
+ Integer.valueOf(times[i].split(":")[1]);
sortedTimes[i] = t;
}
Arrays.sort(sortedTimes);/*sort times*/
/*variables to hold the result*/
int minDiff = 1440;
int minT1 = 1440;
int minT2 = 1440;
for (int i = 0; i < countTime; i++) {
int curr = sortedTimes[i];
int prev = sortedTimes[(countTime+i-1)%countTime];
int diffPrev = Math.abs(curr - prev) < 1440 - Math.abs(curr - prev ) ?
Math.abs(curr - prev) : 1440 - Math.abs(curr - prev ) ;
if (minDiff > diffPrev) {
minDiff = diffPrev;
minT1 = prev;
minT2 = curr;
}
}
System.out.println("Minimum diff in minute: " + minDiff
+ " between " + (minT1/60 + ":" + minT1%60)
+ " and " + (minT2/60 + ":" + minT2%60));
}
}
答案 3 :(得分:0)
此处的Javascript解决方案:
var findMinDifference = function(timePoints) {
let min = Infinity;
let data = timePoints.map(d => timeToMin(d));
//sorting data
let sortedData = data.sort((a, b) => a - b);
for (let i = 1; i < sortedData.length; i++) {
min = Math.min(min, sortedData[i] - sortedData[i - 1]);
}
//subtract the last from the first 1440.
let firstLastDiff =
60 * 24 - (sortedData[sortedData.length - 1] - sortedData[0]);
min = Math.min(firstLastDiff, min);
return min;
};
// convert all times into minutes (HH * 60 + MM)
function timeToMin(t) {
const [hours, min] = t.split(":").map(d => parseInt(d));
return hours * 60 + min;
}