|
1 | 1 | package com.fishercoder.solutions;
|
| 2 | +import java.util.HashMap; |
| 3 | +import java.util.Map; |
2 | 4 |
|
3 | 5 | public class _34 {
|
| 6 | + private static Map<String, Boolean> branchCoverage = new HashMap<>(); |
| 7 | + |
| 8 | + static { |
| 9 | + branchCoverage.put("flag1", false); |
| 10 | + branchCoverage.put("flag2", false); |
| 11 | + branchCoverage.put("flag3", false); |
| 12 | + branchCoverage.put("flag4", false); |
| 13 | + branchCoverage.put("flag5", false); |
| 14 | + branchCoverage.put("flag6", false); |
| 15 | + branchCoverage.put("flag7", false); |
| 16 | + branchCoverage.put("flag8", false); |
| 17 | + branchCoverage.put("flag9", false); |
| 18 | + } |
4 | 19 |
|
5 | 20 | public static class Solution1 {
|
6 | 21 | public int[] searchRange(int[] nums, int target) {
|
@@ -54,38 +69,55 @@ public static class Solution2 {
|
54 | 69 | public int[] searchRange(int[] nums, int target) {
|
55 | 70 | int[] result = new int[]{-1, -1};
|
56 | 71 | if (nums == null || nums.length == 0) {
|
| 72 | + branchCoverage.put("flag1", true); |
57 | 73 | return result;
|
58 | 74 | }
|
59 | 75 | if (nums[0] > target) {
|
| 76 | + branchCoverage.put("flag2", true); |
60 | 77 | return result;
|
61 | 78 | }
|
62 | 79 | if (nums[nums.length - 1] < target) {
|
| 80 | + branchCoverage.put("flag3", true); |
63 | 81 | return result;
|
64 | 82 | }
|
65 | 83 | int left = 0;
|
66 | 84 | int right = nums.length - 1;
|
67 | 85 | while (left <= right) {
|
| 86 | + branchCoverage.put("flag4", true); |
68 | 87 | int mid = left + (right - left) / 2;
|
69 | 88 | if (nums[mid] == target) {
|
70 |
| - while (mid - 1 >= 0 && nums[mid] == nums[mid - 1]) { |
| 89 | + branchCoverage.put("flag5", true); |
| 90 | + while (mid - 1 >= 0 && nums[mid - 1] == nums[mid]) { |
| 91 | + branchCoverage.put("flag6", true); |
71 | 92 | mid--;
|
72 | 93 | }
|
73 | 94 | result[0] = mid;
|
74 | 95 | while (mid + 1 < nums.length && nums[mid] == nums[mid + 1]) {
|
| 96 | + branchCoverage.put("flag7", true); |
75 | 97 | mid++;
|
76 | 98 | }
|
77 | 99 | result[1] = mid;
|
| 100 | + printCoverage(); |
78 | 101 | return result;
|
79 | 102 | } else if (nums[mid] > target) {
|
| 103 | + branchCoverage.put("flag8", true); |
80 | 104 | right = mid - 1;
|
81 | 105 | } else {
|
| 106 | + branchCoverage.put("flag9", true); |
82 | 107 | left = mid + 1;
|
83 | 108 | }
|
84 | 109 | }
|
| 110 | + printCoverage(); |
85 | 111 | return result;
|
86 | 112 | }
|
87 | 113 | }
|
88 | 114 |
|
| 115 | + public static void printCoverage() { |
| 116 | + for (Map.Entry<String, Boolean> entry : branchCoverage.entrySet()) { |
| 117 | + System.out.println(entry.getKey() + " was " + (entry.getValue() ? "hit" : "not hit")); |
| 118 | + } |
| 119 | + } |
| 120 | + |
89 | 121 | public static class Solution3 {
|
90 | 122 | /**
|
91 | 123 | * My completely original solution on 1/15/2022. A great practice to solidify binary search basics.
|
|
0 commit comments