贴一下第一题吃烧饼后来的想法,时间复杂度O(n)......(目前测试用例是对的) Scanner in = new Scanner(System.in); int n = in.nextInt(); int[] nums = new int[n]; for (int i=0;i<n;i++){ nums[i] = in.nextInt(); } int count = 0; int min = nums[0]; for (int i=0;i<nums.length;i++){ if (nums[i]<min) { min = nums[i]; } count += min; } System.out.println(count);
第一题全AC Python代码 n = int(input()) s = list(map(int, input().split(' &(5528)#39;))) def sol(n, s): if n == 1: return s[0] ret = 0 t = float('inf&(835)#39;) min_index = None for i, v in enumerate(s): if v < t: t = v min_index = i if min_index == 0: return s[0] * n ret = t * (n - min_index) return ret + sol(min_index, s[:min_index]) print(sol(n, s))
纯暴力😂 #include<iostream> #include<vector> using namespace std; class Solution { public: long long EatCake(int n, vector<int>& nums) { long long count = 0; while (nums[0] > 0) { for (auto& c : nums) { c--; if (c >= 0) { count++; } else break; } } return count; } }; int main() { vector<int> a{1,4,5,3,2,6}; Solution c; c.EatCake(5, a); }
第一题思路:对第二行的输入数组,每次找到最少烧饼的盘子,然后对最少烧饼的盘子右边的所有盘子吃最少烧饼数量,再对左边的盘子做同样处理直到第一个盘子。 考完在本地IDE上调试出来,自己测试没啥问题,发出来请大家找找问题。。。一起学习 def funa(s,sum): s1 =sorted(s) for i, item in enumerate(s): if item == s1[0]: s1.pop(0) sum += item*(len(s)-i) if i == 0: return sum else: return(funa(s[:i], sum)) ans = funa(s,0) print(ans)