小编sti*_*ing的帖子

在O(log n)时间中搜索旋转排序数组

我在leetcode上经历了这个问题的艰难时期。

我不得不查找解决方案,因为出于某种原因,我的代码总是会遇到一些问题。当在数组中查找不存在的目标编号时,我拥有的当前代码仍然无限循环。

我正在寻找一些帮助,以帮助您了解是否存在更直观的方法来解决此问题,并且还有助于修复我的代码。

我认为我不需要此行:

if nums[mid] == target or nums[low] == target or nums[high] == target:
            return target
Run Code Online (Sandbox Code Playgroud)

我想知道如何做才能确保如果我有一个由1-3个数字组成的数组,那么我的代码无需指定此条件语句就能找到目标。这是几个例子

print(search([1, 2, 3], 1))
print(search([1], 1))
print(search([2, 1], 1))
Run Code Online (Sandbox Code Playgroud)

另外,在这样的例子中,print(search([5, 1, 2, 3, 4], 6)) 我的代码永远不会返回-1

if nums[mid] == target or nums[low] == target or nums[high] == target:
            return target
Run Code Online (Sandbox Code Playgroud)

从遇到类似于我上面的解决方案的多个解决方案开始,人们都说是这样,O(logn)但是我不知道我们何时将其移动low并移动high1。这使我相信该解决方案是最坏的情况O(n)

寻求帮助!

python algorithm binary-search data-structures python-3.x

8
推荐指数
1
解决办法
222
查看次数

理解如何找到链表中的中间节点的while循环条件

我不完全理解leetcode上“找到链表的中间”while问题的循环条件:

给定一个具有头节点 head 的非空单链表,返回链表的中间节点。

如果有两个中间节点,则返回第二个中间节点。

对于while循环,我认为条件是

while first and last.next:
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时,我收到一条错误消息

AttributeError: 'NoneType' object has no attribute 'next'
Run Code Online (Sandbox Code Playgroud)

条件语句应该是

while last and last.next:
Run Code Online (Sandbox Code Playgroud)

我不明白为什么。这是带有正确 while 循环的完整代码:

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def middleNode(self, head):
        first = last = head
        while last and last.next:
            first = first.next
            last = last.next.next
        return first
Run Code Online (Sandbox Code Playgroud)

python linked-list data-structures

3
推荐指数
1
解决办法
922
查看次数

为什么“或”条件中的语句顺序很重要?

我正在解决一个我在原地反转单词的问题。我注意到,根据我的or运算符前后的语句顺序,该代码将无法正常工作。

如果我改变

if i == len(s1) or s1[i] == ' ':
Run Code Online (Sandbox Code Playgroud)

if s1[i] == ' ' or i == len(s1):
Run Code Online (Sandbox Code Playgroud)

我得到错误

Traceback (most recent call last):
  File "reverse_words_in_place.py", line 58, in <module>
    reverse_words(s1)
  File "reverse_words_in_place.py", line 6, in reverse_words
    if s1[i] == ' ' or i == len(s1):
IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)
if i == len(s1) or s1[i] == ' ':
Run Code Online (Sandbox Code Playgroud)

此代码的输出是

steal pound cake
Run Code Online (Sandbox Code Playgroud)

只要

if i == len(s1) or s1[i] == ' ': …
Run Code Online (Sandbox Code Playgroud)

python logical-operators

0
推荐指数
1
解决办法
90
查看次数