Other idea of 14.8 and a little improvment of 14.10(v1.4.8)

#1

In 14.8, the sample code uses vector and HashSet to check whether an interval has been covered or not. I uses a different method, I created a wrapper class for Interval to record which visiting will cover it. And we only need to check this visiting record to find out the visiting point:

private static class Wrapper
	{
		final Interval data;
		int num;
		
		Wrapper(final Interval item)
		{
			this.data = item;
			num = 0;
		}
	}

  // Make sure both share same wrapper instance.
        for (final Interval item : intervals)
	{
		final Wrapper wrapper = new Wrapper(item);
		items[num++] = new StartPoint(wrapper);
		items[num++] = new EndPoint(wrapper);
	}

  // Visiting time.
    num = 0;
    for (final Point item : items)
    {
    // Start point, set the current covering time.
    	if (item instanceof StartPoint)
    	{
    		item.item.num = num;
    	}
    	// First end point in this iteration.
    	else if (item.item.num == num)
    	{
                // Update the cover time, all following element should in next iteration.
    		result[num++] = item.getValue();
    	}
    }

In 14.10, the code of placing the elements can be improved a little:

  1. the while condition can be key_to_offset.size() > 1, which means only one key hasn’t been placed completely, because all other keys have been placed completely, the only left one is placed well too. Consider there’s only 1 key available, or 2 keys but one of them only has 1 element, once we placed that element correctly, the job is done.
  2. we can check the from and to element has same key, in that case we don’t need to swap the two.
0 Likes