.分别用选择排序和冒泡排序算法编写程序完成n(n由键盘输入)个不同随机数的降序排列,并分行输出原始数据和排序数据。
以下是一些思路,可供参考:
选择排序算法实现:
import random
def selection_sort(arr):
n = len(arr)
for i in range(n):
max_index = i
for j in range(i+1, n):
if arr[j] > arr[max_index]:
max_index = j
arr[i], arr[max_index] = arr[max_index], arr[i]
n = int(input("请输入随机数的个数:"))
arr = [random.randint(1, 100) for i in range(n)]
print("原始数据:")
print(arr)
selection_sort(arr)
print("排序数据:")
for num in arr:
print(num)
冒泡排序算法实现:
import random
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(n-i-1):
if arr[j+1] > arr[j]:
arr[j], arr[j+1] = arr[j+1], arr[j]
n = int(input("请输入随机数的个数:"))
arr = [random.randint(1, 100) for i in range(n)]
print("原始数据:")
print(arr)
bubble_sort(arr)
print("排序数据:")
for num in arr:
print(num)
分析:
根据题干的要求,我们需要删除倒数第n个节点,在返回头结点。只需要找到倒数第n个节点,将其删除,再返回。
说真的不难,直接用双指针,来!
借用一下大佬的草图
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
# 定义哑终端,用于前项循环
dummy = ListNode(0)
dummy.next = head
# 设置两个指针
fast = head
slow = dummy
# 移动fast到n步
for i in range(n):
fast = fast.next
# 快慢节点同时走,循环到fast的末尾
while fast:
fast = fast.next
slow = slow.next
slow.next = slow.next.next
return dummy.next
卷啊卷,一直卷!~
最近在改论文,就先到这里吧!~
关于链表,自我感觉学的不是很好,后期空了出一些关于链表的小技能树吧,flag先立在这里!!!
建议坚持,慢慢来比较快!
问题解决方案:
def selectSort(nums): n = len(nums) for i in range(n): minIndex = i for j in range(i+1, n): if nums[j] < nums[minIndex]: minIndex = j nums[i], nums[minIndex] = nums[minIndex], nums[i] return nums
if name == 'main': n = int(input("输入随机数的个数:")) nums = [] for i in range(n): nums.append(int(input())) print("原始数据:") for num in nums: print(num) nums = selectSort(nums) print("排序后的数据:") for num in nums: print(num)
def bubbleSort(nums): n = len(nums) for i in range(n-1): for j in range(n-i-1): if nums[j] < nums[j+1]: nums[j], nums[j+1] = nums[j+1], nums[j] return nums
if name == 'main': n = int(input("输入随机数的个数:")) nums = [] for i in range(n): nums.append(int(input())) print("原始数据:") for num in nums: print(num) nums = bubbleSort(nums) print("排序后的数据:") for num in nums: print(num)
def combinations(nums, n): res = [] def dfs(start, path, n): if n == 0: res.append(path[:]) return for i in range(start, len(nums)): path.append(nums[i]) dfs(i+1, path, n-1) path.pop()
dfs(0, [], n)
return res
if name == 'main': nums = [1,2,3,4,5] n = 3 res = combinations(nums, n) print(res)
class Solution: def preorder(self, root: 'Node') -> List[int]: if not root: return [] res = [root.val] for child in root.children: res += self.preorder(child) return res