From 1ae703ec6f1549b2d699fd5d3cf5e0db452c71cd Mon Sep 17 00:00:00 2001 From: lingxinglovecode <80627935+lingxinglovecode@users.noreply.github.com> Date: Thu, 10 Jun 2021 14:36:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=99=E5=A4=A7=E6=95=B0=E6=8D=AE=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 10 +- .../DS.py" | 99 +++++++++++++++++++ 2 files changed, 104 insertions(+), 5 deletions(-) create mode 100644 "\346\265\231\345\244\247\346\225\260\346\215\256\347\273\223\346\236\204/DS.py" diff --git a/main.py b/main.py index 583b543..abb6e04 100644 --- a/main.py +++ b/main.py @@ -1,7 +1,7 @@ -import pdfplumber -url_pdf = 'C://Users//王连兴//Desktop//机器学习第二次作业.pdf' -with pdfplumber.open(url_pdf) as pdf: - first_page = pdf.pages[0] - print(first_page.extract_text()) \ No newline at end of file +k = 5 +a_list = [] +for i in range(5): + a_list.append(int(input())) +print(a_list) \ No newline at end of file diff --git "a/\346\265\231\345\244\247\346\225\260\346\215\256\347\273\223\346\236\204/DS.py" "b/\346\265\231\345\244\247\346\225\260\346\215\256\347\273\223\346\236\204/DS.py" new file mode 100644 index 0000000..345177b --- /dev/null +++ "b/\346\265\231\345\244\247\346\225\260\346\215\256\347\273\223\346\236\204/DS.py" @@ -0,0 +1,99 @@ +#本节主要记录浙大数据结构课程中出现的编程题目,题目均可在在PTA中找到 +#PTA https://pintia.cn/problem-sets?tab=0 +#浙大版《数据结构(第2版)》题目集 + + +class Solution: + + + + + def get_input(self,fuc="max_subsequence"): + if fuc == "max_subsequence": + k = int(input()) + nums = [int(num) for num in input().split()] + return k,nums + +# 实例1.1 最大子序和 +# https://pintia.cn/problem-sets/434/problems/5404 + # 方法1:直接遍历求解 + def max_subsequence(self,k,nums): + ''' + input: + k: 输入数据个数 e.g. 4 + nums:输入的列表 e.g.[1,3,4,3] + return: 最大子序和 + ''' + max_sum = 0 + for i in range(k): + temp_sum = 0 + for j in range(i,k): + temp_sum = temp_sum + nums[j] + if temp_sum > max_sum: + max_sum = temp_sum + return max_sum + + #方法2:分而治之 + def max_subsequence(self,k,nums): + start = 0 + end = k-1 + def help(start,end): + mid = int((end+start)/2) + + if start == end: + return nums[start] if nums[start]>0 else 0 + + left_max = help(start,mid) + right_max = help(mid+1,end) + + + left_sum = 0 + left_sum_max = 0 + for i in range(mid,start-1,-1): + left_sum = left_sum+nums[i] + if left_sum>left_sum_max: + left_sum_max = left_sum + right_sum = 0 + right_sum_max = 0 + for j in range(mid+1,end+1,1): + right_sum = right_sum+nums[j] + if right_sum>right_sum_max: + right_sum_max=right_sum + mid_max = left_sum_max+right_sum_max + + + return max(left_max,right_max,mid_max) + + + max_sum = help(start,end) + return max_sum + + #方法3:贪心算法 + def max_subsequence(self,k,nums): + temp = 0 + max_res = 0 + for i in range(k): + temp = temp + nums[i] + if temp > max_res: + max_res = temp + elif temp < 0: + temp = 0 + return max_res + + + + + + +if __name__ == '__main__': + solution = Solution() + get_input = False + if get_input: + k,nums = solution.get_input('max_subsequence') + k = 6 + nums = [-2,11,-4,13,-5,-2] + print(solution.max_subsequence(k,nums)) + + + +