[关闭]
@XQF 2018-03-07T22:58:32.000000Z 字数 818 阅读 2137

如何判断一个数组数字是不是连续相邻?

数据结构与算法


问题描述:一个数组序列,元素取值可能是0-65535中的任意一个数,相同数值不会重复出现。0是例外,可以反复出现。设计一种算法,当从该数组序列中随意选取5个数值,判断这5个数值是否可以连续相邻。需要注意

  1. 5个数值允许乱序,例如{8,7,5,0,6}
  2. 0可以通配任意数值,例如{8,7,5,0,6}中的0可以通配成9或者4
  3. 0可以多次出现
  4. 全0算是连续,只有一个非0算连续

假如取出的数列为a。
那么要是a中没有0,则a的最大值与最小值之差一定为4。
要是a中有0的话,除了0剩下的数列中的最大值与最小值之差一定小于4.

满足上述条件就OK了
,。,。像这种内部条件非常复杂的,就要哦才能够外部范围夹逼

  1. public class Solution {
  2. public boolean isContinuous(int[] nums) {
  3. boolean hasZero = false;
  4. int max = Integer.MIN_VALUE;
  5. int min = Integer.MAX_VALUE;
  6. for (int i = 0; i < nums.length; i++) {
  7. if (nums[i] == 0) {
  8. hasZero = true;
  9. continue;
  10. }
  11. if (nums[i] > max) {
  12. max = nums[i];
  13. }
  14. if (nums[i] < min) {
  15. min = nums[i];
  16. }
  17. }
  18. if (hasZero) {
  19. if (max - min < 4) {
  20. return true;
  21. } else {
  22. return false;
  23. }
  24. } else {
  25. if (max - min == 4) {
  26. return true;
  27. } else {
  28. return false;
  29. }
  30. }
  31. }
  32. public static void main(String[] args) {
  33. Solution solution = new Solution();
  34. int[] nums = {8, 7, 6, 5, 0};
  35. System.out.println(solution.isContinuous(nums));
  36. }
  37. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注