考完试了,新学业不紧张的情况下有可以每日做题了~
链接:
力扣1995统计特殊四元组https://leetcode-cn.com/problems/count-special-quadruplets/题目很直接,复杂的算法也想不到,只有简单粗暴的遍历所有情况。不过简单思考了一下,稍微地进行了一点点性能上的优化,将数组排序后再遍历可以省略掉部分遍历,具体见注释。代码如下:
package cn.daycode.leetcode;
import java.util.Arrays;
public class CountQuadruplets {
public static void main(String[] args) {
Solution s = new Solution();
int [] nums = {28,8,49,85,37,90,20,8};
System.out.println(s.countQuadruplets(nums));
}
}
class Solution {
public int countQuadruplets(int[] nums) {
Arrays.sort(nums);
System.out.println(Arrays.toString(nums));
int count = 0;
for (int i = 0; i < nums.length-3; i++) {
for (int j = i+1; j < nums.length-2; j++) {
for (int k = j+1; k < nums.length-1; k++) {
for (int l = k+1; l < nums.length; l++) {
if(nums[i]+nums[j]+nums[k] == nums[l]){
count++;
// 排序后,如果3左面三者之和小于第四个元素,后面的nums[l]就不需要继续尝试了
}else if(nums[i]+nums[j]+nums[k] < nums[l]){
break;
}
}
}
}
}
return count;
}
}
出现了一些状况,这个测试用例没有通过,但是经过手工计算,该例确实应该有3种形式,正确答案给的是1。不知道问题出在哪里。