Re: [闲聊] 每日leetcode

楼主: sixB (6B)   2024-07-26 04:15:39
前几天就写merge
想说今天写一下quick
ㄇㄉ真的TLE==
来玩radix好了
※ 引述《sustainer123 (caster)》之铭言:
: ※ 引述《DJYOMIYAHINA (通通打死)》之铭言:
: : 肥肥想说来练一下quick
: : 然后怎么搞都过不了worst case
: : 直接水桶伺候 操
: : 后来想想我最该练的应该是merge sort
: : 没写过几次
: : def sortArray(self, nums: List[int]) -> List[int]:
: : cnt = [0 for _ in range(100002)]
: : for n in nums:
: : cnt[n+50000] += 1
: : ans = []
: : for idx, val in enumerate(cnt):
: : for i in range(val):
: : ans.append(idx-50000)
: : return ans
: : # def middle_of_threerandom(l, r):
: : # pivot_index_0 = random.randint(l, r)
: : # pivot_index_1 = random.randint(l, r)
: : # pivot_index_2 = random.randint(l, r)
: : # tmp = sorted([(nums[pivot_index_0], pivot_index_0),
: : (nums[pivot_index_1], pivot_index_1), (nums[pivot_index_2], pivot_index_2)])
: : # return tmp[1][1]
: : # def qs(l,r):
: : # if l >= r:
: : # return
: : # pivot_idx = middle_of_threerandom(l,r)
: : # nums[r], nums[pivot_idx] = nums[pivot_idx], nums[r]
: : # pivot = nums[r]
: : # start = l
: : # for i in range(l, r):
: : # if nums[i] <= pivot:
: : # nums[start], nums[i] = nums[i], nums[start]
: : # start += 1
: : # nums[r], nums[start] = nums[start], nums[r]
: : # qs(l, start-1)
: : # qs(start+1, r)
: : # qs(0, len(nums)-1)
: : # return nums
: 思路:
: 本来想说quick sort
: 结果翻一下书才发现quick sort最糟状况会n**2
: 能用的就heap sort跟merge sort
: 刚好复习一下排序
: 不然平常都sort() 启动
: Python Code:
: class Solution:
: def sortArray(self, nums: List[int]) -> List[int]:
: def merge(left: int,mid: int,right: int):
: tmp = [0] *((right - left) + 1)
: i,j,k = left, mid + 1, 0
: while i <= mid and j <= right:
: if nums[i] <= nums[j]:
: tmp[k] = nums[i]
: i += 1
: else:
: tmp[k] = nums[j]
: j += 1
: k += 1
: while i <= mid:
: tmp[k] = nums[i]
: i += 1
: k += 1
: while j <= right:
: tmp[k] = nums[j]
: j += 1
: k += 1
: for k in range(len(tmp)):
: nums[left+k] = tmp[k]
: def merge_sort(nums: list[int],left: int,right: int):
: if left >= right:
: return
: mid = (left + right) // 2
: merge_sort(nums,left,mid)
: merge_sort(nums,mid+1,right)
: merge(left,mid,right)
: merge_sort(nums,0,len(nums)-1)
: return nums
楼主: sixB (6B)   2023-07-26 04:15:00
拉屌解答写counting sort更快merge acㄌ 想睡了==
作者: Smallsh (Smallsh)   2024-07-26 04:22:00
大师
作者: smart0eddie (smart0eddie)   2024-07-26 04:28:00
sort喔 我可以继续抄解答吗
楼主: sixB (6B)   2024-07-26 04:57:00
sort() 就过了ㄅ

Links booklink

Contact Us: admin [ a t ] ucptt.com