问题如下:
作为输入,您将获得一个大小为N的数组(ARR),该数组不知道–的内容,并且将无法看到–的内容以及预先分配的值U?N。您的解决方案应适用于U和N的任何值。
系统会为您提供大小为N的工作数组(W)。您还可以使用以下同时在O(1)时间运行的帮助器函数:
SORT(A,B):SORT将采用数组ARR或W的两个连续部分,大小为| A |?U和| B |?U,将它们合并为一个新数组,对其进行排序,然后将其下部大小| A | 这种新的数组回甲,剩下的值代入乙。它将返回A中剩余的A值的数量。
COPY(A-> C):COPY会将A的内容复制到C中。| A | == | C | 。
我已经有解决此问题的方法,它是合并排序的一个变体,并且具有类似O((N / U)log(N / U))的运行时,但是我想知道是否有更快的解决方案。
另外,我想知道如何在没有工作数组(W)的约束下如何对数组进行排序。
根据要求,我的解决方案(非常非正式和简化)
# Define helper subroutine MERGE (merges two sorted arrays) …Run Code Online (Sandbox Code Playgroud) 我有一个可能是空的文件,也可能不是空的。目标是从文件中读取一个 json 对象,附加到它,然后将它写回文件。但是,在文件为空的情况下, json.load() 会失败。如何解决此问题而无需事先检查文件是否为空?
这是我当前的代码:
with open(filename, 'a+') as infile:
old_data = json.load(infile)
data = old_data + obj
with open(filename, 'w') as outfile:
json.dump(data, outfile)
Run Code Online (Sandbox Code Playgroud)
错误信息是:
File "<stdin>", line 3, in <module>
File "/usr/lib/python3.6/json/__init__.py", line 299, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "/usr/lib/python3.6/json/__init__.py", line 354, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.6/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.6/json/decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 …Run Code Online (Sandbox Code Playgroud)