Skip to main content
Rollback to Revision 3
Source Link
Mast
  • 13.8k
  • 12
  • 57
  • 127
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace ArrayQuestions
{
    [TestClass]
    public class MyCalender2Test
    {
        [TestMethod]
        public void TestMethod1()
        {
            MyCalendarTwo myCalendar = new MyCalendarTwo();
            Assert.IsTrue(myCalendar.Book(10, 20)); // returns true
            Assert.IsTrue(myCalendar.Book(50, 60)); // returns true
            Assert.IsTrue(myCalendar.Book(10, 40)); // returns true
            Assert.IsFalse(myCalendar.Book(5, 15)); // returns false
            Assert.IsTrue(myCalendar.Book(5, 10)); // returns true
            Assert.IsTrue(myCalendar.Book(25, 55)); // returns true
        }
    }

    public class MyCalendarTwo
    {
        private SortedDictionary<int, int> _dict;
        public MyCalendarTwo()
        {
            _dict = new SortedDictionary<int, int>();
        }

        /// <summary>
        /// foreach start you add a pair of (start,1)
        /// foreach end you add a pair of (end,-1)
        /// the list is sorted we add and remove events.
        /// if we can more then 3 events added at the same time.
        /// we need to remove the event 
        /// </summary>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <returns></returns>
        public bool Book(int start, int end)
        {
            //   s1------e1
            // s-----e
            //      s---e
            // s------------e
            //      s---------e
            //s--e good
            //               s--e

            if(!_dict.TryGetValue(start, out var temp))
            {
                _dict.Add(start, temp + 1);
            }
            else
            {
                _dict[start]++;
            }

            if (!_dict.TryGetValue(end, out var temp1))
            {
                _dict.Add(end, temp1 - 1);
            }
            else
            {
                _dict[end]--;
            }
            
            int active = 0;
            foreach (var d in _dict.Values)
            {
                active += d;
                if (active >= 3)
                {
                    _dict[start]--;
                    _dict[end]++;
                    if (_dict[start] == 0)
                    {
                        _dict.Remove(start);
                    }
                    if (_dict[end] == 0)
                    {
                        _dict.Remove(end);
                    }

                    return false;
                }
            }

            return true;
        }
    }

    /**
     * Your MyCalendarTwo object will be instantiated and called as such:
     * MyCalendarTwo obj = new MyCalendarTwo();
     * bool param_1 = obj.Book(start,end);
     */
}
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace ArrayQuestions
{
    [TestClass]
    public class MyCalender2Test
    {
        [TestMethod]
        public void TestMethod1()
        {
            MyCalendarTwo myCalendar = new MyCalendarTwo();
            Assert.IsTrue(myCalendar.Book(10, 20)); // returns true
            Assert.IsTrue(myCalendar.Book(50, 60)); // returns true
            Assert.IsTrue(myCalendar.Book(10, 40)); // returns true
            Assert.IsFalse(myCalendar.Book(5, 15)); // returns false
            Assert.IsTrue(myCalendar.Book(5, 10)); // returns true
            Assert.IsTrue(myCalendar.Book(25, 55)); // returns true
        }
    }

    public class MyCalendarTwo
    {
        private SortedDictionary<int, int> _dict;
        public MyCalendarTwo()
        {
            _dict = new SortedDictionary<int, int>();
        }

        /// <summary>
        /// foreach start you add a pair of (start,1)
        /// foreach end you add a pair of (end,-1)
        /// the list is sorted we add and remove events.
        /// if we can more then 3 events added at the same time.
        /// we need to remove the event 
        /// </summary>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <returns></returns>
        public bool Book(int start, int end)
        {
            //   s1------e1
            // s-----e
            //      s---e
            // s------------e
            //      s---------e
            //s--e good
            //               s--e

            if(!_dict.TryGetValue(start, out var temp))
            {
                _dict.Add(start, temp + 1);
            }
            else
            {
                _dict[start]++;
            }

            if (!_dict.TryGetValue(end, out var temp1))
            {
                _dict.Add(end, temp1 - 1);
            }
            else
            {
                _dict[end]--;
            }
            
            int active = 0;
            foreach (var d in _dict.Values)
            {
                active += d;
                if (active >= 3)
                {
                    _dict[start]--;
                    _dict[end]++;
                    if (_dict[start] == 0)
                    {
                        _dict.Remove(start);
                    }
                    if (_dict[end] == 0)
                    {
                        _dict.Remove(end);
                    }

                    return false;
                }
            }

            return true;
        }
    }

    /**
     * Your MyCalendarTwo object will be instantiated and called as such:
     * MyCalendarTwo obj = new MyCalendarTwo();
     * bool param_1 = obj.Book(start,end);
     */
}
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace ArrayQuestions
{
    [TestClass]
    public class MyCalender2Test
    {
        [TestMethod]
        public void TestMethod1()
        {
            MyCalendarTwo myCalendar = new MyCalendarTwo();
            Assert.IsTrue(myCalendar.Book(10, 20)); // returns true
            Assert.IsTrue(myCalendar.Book(50, 60)); // returns true
            Assert.IsTrue(myCalendar.Book(10, 40)); // returns true
            Assert.IsFalse(myCalendar.Book(5, 15)); // returns false
            Assert.IsTrue(myCalendar.Book(5, 10)); // returns true
            Assert.IsTrue(myCalendar.Book(25, 55)); // returns true
        }
    }

    public class MyCalendarTwo
    {
        private SortedDictionary<int, int> _dict;
        public MyCalendarTwo()
        {
            _dict = new SortedDictionary<int, int>();
        }

        /// <summary>
        /// foreach start you add a pair of (start,1)
        /// foreach end you add a pair of (end,-1)
        /// the list is sorted we add and remove events.
        /// if we can more then 3 events added at the same time.
        /// we need to remove the event 
        /// </summary>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <returns></returns>
        public bool Book(int start, int end)
        {
            //   s1------e1
            // s-----e
            //      s---e
            // s------------e
            //      s---------e
            //s--e good
            //               s--e

            if(!_dict.TryGetValue(start, out var temp))
            {
                _dict.Add(start, temp + 1);
            }
            else
            {
                _dict[start]++;
            }

            if (!_dict.TryGetValue(end, out var temp1))
            {
                _dict.Add(end, temp1 - 1);
            }
            else
            {
                _dict[end]--;
            }
            
            int active = 0;
            foreach (var d in _dict.Values)
            {
                active += d;
                if (active >= 3)
                {
                    _dict[start]--;
                    _dict[end]++;
                    if (_dict[start] == 0)
                    {
                        _dict.Remove(start);
                    }

                    return false;
                }
            }

            return true;
        }
    }

    /**
     * Your MyCalendarTwo object will be instantiated and called as such:
     * MyCalendarTwo obj = new MyCalendarTwo();
     * bool param_1 = obj.Book(start,end);
     */
}
added 148 characters in body
Source Link
Gilad
  • 5.4k
  • 5
  • 38
  • 65
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace ArrayQuestions
{
    [TestClass]
    public class MyCalender2Test
    {
        [TestMethod]
        public void TestMethod1()
        {
            MyCalendarTwo myCalendar = new MyCalendarTwo();
            Assert.IsTrue(myCalendar.Book(10, 20)); // returns true
            Assert.IsTrue(myCalendar.Book(50, 60)); // returns true
            Assert.IsTrue(myCalendar.Book(10, 40)); // returns true
            Assert.IsFalse(myCalendar.Book(5, 15)); // returns false
            Assert.IsTrue(myCalendar.Book(5, 10)); // returns true
            Assert.IsTrue(myCalendar.Book(25, 55)); // returns true
        }
    }

    public class MyCalendarTwo
    {
        private SortedDictionary<int, int> _dict;
        public MyCalendarTwo()
        {
            _dict = new SortedDictionary<int, int>();
        }

        /// <summary>
        /// foreach start you add a pair of (start,1)
        /// foreach end you add a pair of (end,-1)
        /// the list is sorted we add and remove events.
        /// if we can more then 3 events added at the same time.
        /// we need to remove the event 
        /// </summary>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <returns></returns>
        public bool Book(int start, int end)
        {
            //   s1------e1
            // s-----e
            //      s---e
            // s------------e
            //      s---------e
            //s--e good
            //               s--e

            if(!_dict.TryGetValue(start, out var temp))
            {
                _dict.Add(start, temp + 1);
            }
            else
            {
                _dict[start]++;
            }

            if (!_dict.TryGetValue(end, out var temp1))
            {
                _dict.Add(end, temp1 - 1);
            }
            else
            {
                _dict[end]--;
            }
            
            int active = 0;
            foreach (var d in _dict.Values)
            {
                active += d;
                if (active >= 3)
                {
                    _dict[start]--;
                    _dict[end]++;
                    if (_dict[start] == 0)
                    {
                        _dict.Remove(start);
                    }
                    if (_dict[end] == 0)
                    {
                        _dict.Remove(end);
                    }

                    return false;
                }
            }

            return true;
        }
    }

    /**
     * Your MyCalendarTwo object will be instantiated and called as such:
     * MyCalendarTwo obj = new MyCalendarTwo();
     * bool param_1 = obj.Book(start,end);
     */
}
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace ArrayQuestions
{
    [TestClass]
    public class MyCalender2Test
    {
        [TestMethod]
        public void TestMethod1()
        {
            MyCalendarTwo myCalendar = new MyCalendarTwo();
            Assert.IsTrue(myCalendar.Book(10, 20)); // returns true
            Assert.IsTrue(myCalendar.Book(50, 60)); // returns true
            Assert.IsTrue(myCalendar.Book(10, 40)); // returns true
            Assert.IsFalse(myCalendar.Book(5, 15)); // returns false
            Assert.IsTrue(myCalendar.Book(5, 10)); // returns true
            Assert.IsTrue(myCalendar.Book(25, 55)); // returns true
        }
    }

    public class MyCalendarTwo
    {
        private SortedDictionary<int, int> _dict;
        public MyCalendarTwo()
        {
            _dict = new SortedDictionary<int, int>();
        }

        /// <summary>
        /// foreach start you add a pair of (start,1)
        /// foreach end you add a pair of (end,-1)
        /// the list is sorted we add and remove events.
        /// if we can more then 3 events added at the same time.
        /// we need to remove the event 
        /// </summary>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <returns></returns>
        public bool Book(int start, int end)
        {
            //   s1------e1
            // s-----e
            //      s---e
            // s------------e
            //      s---------e
            //s--e good
            //               s--e

            if(!_dict.TryGetValue(start, out var temp))
            {
                _dict.Add(start, temp + 1);
            }
            else
            {
                _dict[start]++;
            }

            if (!_dict.TryGetValue(end, out var temp1))
            {
                _dict.Add(end, temp1 - 1);
            }
            else
            {
                _dict[end]--;
            }
            
            int active = 0;
            foreach (var d in _dict.Values)
            {
                active += d;
                if (active >= 3)
                {
                    _dict[start]--;
                    _dict[end]++;
                    if (_dict[start] == 0)
                    {
                        _dict.Remove(start);
                    }

                    return false;
                }
            }

            return true;
        }
    }

    /**
     * Your MyCalendarTwo object will be instantiated and called as such:
     * MyCalendarTwo obj = new MyCalendarTwo();
     * bool param_1 = obj.Book(start,end);
     */
}
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace ArrayQuestions
{
    [TestClass]
    public class MyCalender2Test
    {
        [TestMethod]
        public void TestMethod1()
        {
            MyCalendarTwo myCalendar = new MyCalendarTwo();
            Assert.IsTrue(myCalendar.Book(10, 20)); // returns true
            Assert.IsTrue(myCalendar.Book(50, 60)); // returns true
            Assert.IsTrue(myCalendar.Book(10, 40)); // returns true
            Assert.IsFalse(myCalendar.Book(5, 15)); // returns false
            Assert.IsTrue(myCalendar.Book(5, 10)); // returns true
            Assert.IsTrue(myCalendar.Book(25, 55)); // returns true
        }
    }

    public class MyCalendarTwo
    {
        private SortedDictionary<int, int> _dict;
        public MyCalendarTwo()
        {
            _dict = new SortedDictionary<int, int>();
        }

        /// <summary>
        /// foreach start you add a pair of (start,1)
        /// foreach end you add a pair of (end,-1)
        /// the list is sorted we add and remove events.
        /// if we can more then 3 events added at the same time.
        /// we need to remove the event 
        /// </summary>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <returns></returns>
        public bool Book(int start, int end)
        {
            //   s1------e1
            // s-----e
            //      s---e
            // s------------e
            //      s---------e
            //s--e good
            //               s--e

            if(!_dict.TryGetValue(start, out var temp))
            {
                _dict.Add(start, temp + 1);
            }
            else
            {
                _dict[start]++;
            }

            if (!_dict.TryGetValue(end, out var temp1))
            {
                _dict.Add(end, temp1 - 1);
            }
            else
            {
                _dict[end]--;
            }
            
            int active = 0;
            foreach (var d in _dict.Values)
            {
                active += d;
                if (active >= 3)
                {
                    _dict[start]--;
                    _dict[end]++;
                    if (_dict[start] == 0)
                    {
                        _dict.Remove(start);
                    }
                    if (_dict[end] == 0)
                    {
                        _dict.Remove(end);
                    }

                    return false;
                }
            }

            return true;
        }
    }

    /**
     * Your MyCalendarTwo object will be instantiated and called as such:
     * MyCalendarTwo obj = new MyCalendarTwo();
     * bool param_1 = obj.Book(start,end);
     */
}
Tweeted twitter.com/StackCodeReview/status/1292838129334968324
added 17 characters in body
Source Link
iSR5
  • 6.4k
  • 1
  • 9
  • 16

Implement a MyCalendarTwo class to store your events. A new event can be added if adding the event will not cause a triple booking.

Your class will have one method, book(int start, int end). Formally, this represents a booking on the half open interval [start, end), the range of real numbers x such that start <= x < end.

A triple booking happens when three events have some non-empty intersection (ie., there is some time that is common to all 3 events.)

For each call to the method MyCalendar.book, return true if the event can be added to the calendar successfully without causing a triple booking. Otherwise, return false and do not add the event to the calendar. Your class will be called like this: MyCalendar cal = new MyCalendar(); MyCalendar.book(start, end)

Example 1:

Your class will be called like this:
MyCalendar cal = new MyCalendar();
MyCalendar.book(start, end) Example 1: 
MyCalendar();
MyCalendar.book(10, 20); // returns true
MyCalendar.book(50, 60); // returns true 
MyCalendar.book(10, 40); // returns true
MyCalendar.book(5, 15); // returns false
MyCalendar.book(5, 10); // returns true
MyCalendar.book(25, 55); //returns true

Implement a MyCalendarTwo class to store your events. A new event can be added if adding the event will not cause a triple booking.

Your class will have one method, book(int start, int end). Formally, this represents a booking on the half open interval [start, end), the range of real numbers x such that start <= x < end.

A triple booking happens when three events have some non-empty intersection (ie., there is some time that is common to all 3 events.)

For each call to the method MyCalendar.book, return true if the event can be added to the calendar successfully without causing a triple booking. Otherwise, return false and do not add the event to the calendar.

Your class will be called like this:
MyCalendar cal = new MyCalendar();
MyCalendar.book(start, end) Example 1: 
MyCalendar();
MyCalendar.book(10, 20); // returns true
MyCalendar.book(50, 60); // returns true 
MyCalendar.book(10, 40); // returns true
MyCalendar.book(5, 15); // returns false
MyCalendar.book(5, 10); // returns true
MyCalendar.book(25, 55); //returns true

Implement a MyCalendarTwo class to store your events. A new event can be added if adding the event will not cause a triple booking.

Your class will have one method, book(int start, int end). Formally, this represents a booking on the half open interval [start, end), the range of real numbers x such that start <= x < end.

A triple booking happens when three events have some non-empty intersection (ie., there is some time that is common to all 3 events.)

For each call to the method MyCalendar.book, return true if the event can be added to the calendar successfully without causing a triple booking. Otherwise, return false and do not add the event to the calendar. Your class will be called like this: MyCalendar cal = new MyCalendar(); MyCalendar.book(start, end)

Example 1:

MyCalendar();
MyCalendar.book(10, 20); // returns true
MyCalendar.book(50, 60); // returns true 
MyCalendar.book(10, 40); // returns true
MyCalendar.book(5, 15); // returns false
MyCalendar.book(5, 10); // returns true
MyCalendar.book(25, 55); //returns true
added 17 characters in body
Source Link
iSR5
  • 6.4k
  • 1
  • 9
  • 16
Loading
Source Link
Gilad
  • 5.4k
  • 5
  • 38
  • 65
Loading