小算法实现

1. 我的日程安排算法实现

问题描述:实现存储日程事件的 MyCalendar类。如果没有重复或者交叉事件,则添加该事件到MyCalendar类实例中。

你的类拥有book(int start, int end)方法. 形式上, 间隔范围为[start, end) 。
重复或者交叉事件为start、end在某个间隔中间,注意:start、end可以等于间隔的后端值。

添加成功,book方法返回true,否则为false。

例子1:
MyCalendar();
MyCalendar.book(10, 20); // returns true
MyCalendar.book(15, 25); // returns false
MyCalendar.book(20, 30); // returns true
解释:
中间的book方法参数前端值为15,在(10, 20)之间,所以不能添加到实例中,返回false。
实现代码:

class MyCalendar:

    def __init__(self):
        self.position = []

    def book(self, start, end):
        """
        :type start: int
        :type end: int
        :rtype: bool
        """
        if len(self.position) == 0:
            self.position.append((start, end))
            return True
        for i in range(0, len(self.position)):
            key = self.position[i][0]
            value = self.position[i][1]
            if start in range(key, value) or end in range(key + 1, value):
                return False
            elif start < key < end:
                return False
        for i in range(0, len(self.position)):
            if start < self.position[i][0]:
                self.position.append(self.position[len(self.position) - 1])
                for j in range(len(self.position) - 2, i, -1):
                    self.position[j] = self.position[j - 1]
                self.position[i] = (start, end)
                return True
        self.position.append((start, end))
        return True

# Your MyCalendar object will be instantiated and called as such:
# obj = MyCalendar()
# param_1 = obj.book(start,end)


if __name__ == '__main__':
    obj = MyCalendar()
    param_1 = obj.book(47, 50)
    param_2 = obj.book(33, 41)
    param_3 = obj.book(39, 45)
    param_4 = obj.book(33, 42)
    param_5 = obj.book(25, 32)
    param_6 = obj.book(26, 35)
    param_7 = obj.book(19, 25)
    param_8 = obj.book(3, 8)
    param_9 = obj.book(8, 13)
    param_10 = obj.book(18, 27)
    print(param_1)
    print(param_2)
    print(param_3)
    print(param_4)
    print(param_5)
    print(param_6)
    print(param_7)
    print(param_8)
    print(param_9)
    print(param_10)

    # ["MyCalendar", "book", "book", "book", "book", "book", "book", "book", "book", "book", "book"]
    # [[], [47, 50], [33, 41], [39, 45], [33, 42], [25, 32], [26, 35], [19, 25], [3, 8], [8, 13], [18, 27]]

缺点:超出时间限制

改进:

class MyCalendar:

    def __init__(self):
        self.calendar = []

    def book(self, start, end):
        """
        :type start: int
        :type end: int
        :rtype: bool
        """
        for s, e in self.calendar:
            if start < e and end > s:
                return False
        self.calendar.append((start, end))
        return True

# Your MyCalendar object will be instantiated and called as such:
# obj = MyCalendar()
# param_1 = obj.book(start,end)


if __name__ == '__main__':
    obj = MyCalendar()
    param_1 = obj.book(47, 50)
    param_2 = obj.book(33, 41)
    param_3 = obj.book(39, 45)
    param_4 = obj.book(33, 42)
    param_5 = obj.book(25, 32)
    param_6 = obj.book(26, 35)
    param_7 = obj.book(19, 25)
    param_8 = obj.book(3, 8)
    param_9 = obj.book(8, 13)
    param_10 = obj.book(18, 27)
    print(param_1)
    print(param_2)
    print(param_3)
    print(param_4)
    print(param_5)
    print(param_6)
    print(param_7)
    print(param_8)
    print(param_9)
    print(param_10)

    # ["MyCalendar", "book", "book", "book", "book", "book", "book", "book", "book", "book", "book"]
    # [[], [47, 50], [33, 41], [39, 45], [33, 42], [25, 32], [26, 35], [19, 25], [3, 8], [8, 13], [18, 27]]

第一个代码实现插入间隔时,还要移动插入点后面的间隔,所以时间花费大。本代码直接插入。
代码中的数据结构为元组列表。()表示元组、[]表示列表,即列表中的元素为一个一个的元组。元组存储间隔。

2. 判断一个字符串是不是回文

public boolean palindrome(String x) {
   for (int i = 0; i < x.length() / 2; i++) {
         if (x.charAt(i) != x.charAt(x.length() - 1 - i)) {
             return false;
         }
     }
     return true;
 }

3. 求某个数的阶乘

public long func(int x) {
   long output = 0;
     if (x <= 1) {
         output = 1;
     } else
         output = x * func(x - 1);
     return output;
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值