leetcode

[leetcode 13]Roman to integer

白昼怎懂夜的黑 提交于 2020-03-28 07:42:44
1 题目: Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999. 2 思路 和上一道反过来,好吧,但是思路不一样。 我写的代码思路一样,要考虑一些特殊情况,比较复杂。 别人代码的思路倒是不错: 下面的那个思路,倒序遍历,如果大于5或50或500,那么就是减了,否则就是加。罗马数字小数字在左边是减,且仅限一位。 https://leetcode.com/discuss/2369/solution-for-this-question-but-dont-know-there-any-easier-way 这个是用 哈希函数实现的,我也想过用哈希函数,但是不是这样的,我想的是那个数组全部哈希一遍- -。 https://leetcode.com/discuss/23778/my-accepted-java-code-280-310ms 3 代码: 我的 public int romanToInt(String s) { String[] M = {"","M","MM","MMM"}; String[] C = {"","C","CC","CCC","D","CD","DC","DCC","DCCC","CM"}; String[

LeetCode All in One 题目讲解汇总(持续更新中...)

≯℡__Kan透↙ 提交于 2020-03-28 01:54:47
A sorted list A contains 1, plus some number of primes. Then, for every p < q in the list, we consider the fraction p/q. What is the K -th smallest fraction considered? Return your answer as an array of ints, where answer[0] = p and answer[1] = q . Examples: Input: A = [1, 2, 3, 5], K = 3 Output: [2, 5] Explanation: The fractions to be considered in sorted order are: 1/5, 1/3, 2/5, 1/2, 3/5, 2/3. The third fraction is 2/5. Input: A = [1, 7], K = 1 Output: [1, 7] Note: A will have length between 2 and 2000 . Each A[i] will be between 1 and 30000 . K will be between 1 and A.length * (A.length -

[LeetCode] Sliding Window Median 滑动窗口中位数

吃可爱长大的小学妹 提交于 2020-03-27 18:28:36
中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。 例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 + 3) / 2 = 2.5 设计一个支持以下两种操作的数据结构: void addNum(int num) - 从数据流中添加一个整数到数据结构中。 double findMedian() - 返回目前所有元素的中位数。 示例: addNum(1) addNum(2) findMedian() -> 1.5 addNum(3) findMedian() -> 2 - 解析: 这道题的关键在于要维护两个堆,一个大顶堆,一个小顶堆,这样保证在插入的时候就已经是有序的。 对于大顶堆,堆顶一定是堆中最大的值。对于小顶堆,堆顶一定是堆中最小的值。 现在我们假设一个有序序列,并把这个有序列分为两半,左边一半为较小数,右边一半为较大数。 我们把较小数用大顶堆存储,较大数用小顶堆来存储。那么大顶堆的根一定是较小数里面的最大数,小顶堆的根一定是较大数里面的最小数,也就分别是有序序列中中间的两个数。我们在插入过程中,始终保证大小顶堆的大小差不超过·1 这样插入完成后一定有: 当大顶堆的大小=小顶堆的大小则返回 (maxHeap.top()+minHeap.top() )/2.0 当大顶堆的大小>小顶堆的大小则直接返回maxHeap.top()

LeetCode 4. Median of Two Sorted Arrays

删除回忆录丶 提交于 2020-03-27 18:26:38
问题链接 LeetCode 4. Median of Two Sorted Arrays 题目解析 给定两个有序的数组,找到两个数组的中位数。 解题思路 虽然两个数组都是有序的,要找到其中位数确实有点麻烦,因为两个数组不能简简单单合并起来。 采用最暴力的方法,开一个新向量,把两个数组都放进去,重新排序,然后取其中位数。然而这种方法的时间复杂度是 \((n+m)log(n+m)\) ,不符合题目要求。虽然可以AC,但时间确实久了些,只能打败10%的人,只能说LeetCode的时间判断有毒,参考代码如下: class Solution { public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { vector<long long> V; V.clear(); if(nums1.size() == 0 && nums2.size() == 0) return 0.0; else { for (int i = 0; i < nums1.size(); ++i) V.push_back(nums1[i]); for (int i = 0; i < nums2.size(); ++i) V.push_back(nums2[i]); sort(V.begin(), V.end());

leetcode 4. Median of Two Sorted Arrays

笑着哭i 提交于 2020-03-27 17:09:42
https://leetcode.com/problems/median-of-two-sorted-arrays/ There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)). Example 1: nums1 = [1, 3] nums2 = [2] The median is 2.0 Example 2: nums1 = [1, 2] nums2 = [3, 4] The median is (2 + 3)/2 = 2.5第一种思路:采用最暴力的方法,因为给的两个数组都已经排序了,也知道中位数是第几个,直接采用二分归并排序到中位数。 1 class Solution { 2 public: 3 double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { 4 vector<int> nums3; 5 int i=0,j=0,k=0; 6 int m =(nums1.size()+nums2.size()); 7

LeetCode 914. 卡牌分组

北城余情 提交于 2020-03-27 15:27:24
我的LeetCode: https://leetcode-cn.com/u/ituring/ 我的LeetCode刷题源码[GitHub]: https://github.com/izhoujie/Algorithmcii LeetCode 914. 卡牌分组 题目 给定一副牌,每张牌上都写着一个整数。 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌。 组内所有的牌上都写着相同的整数。 仅当你可选的 X >= 2 时返回 true。 示例 1: 输入:[1,2,3,4,4,3,2,1] 输出:true 解释:可行的分组是 [1,1],[2,2],[3,3],[4,4] 示例 2: 输入:[1,1,1,2,2,2,3,3] 输出:false 解释:没有满足要求的分组。 示例 3: 输入:[1] 输出:false 解释:没有满足要求的分组。 示例 4: 输入:[1,1] 输出:true 解释:可行的分组是 [1,1] 示例 5: 输入:[1,1,2,2,2,2] 输出:true 解释:可行的分组是 [1,1],[2,2],[2,2] 提示: 1 <= deck.length <= 10000 0 <= deck[i] < 10000 来源:力扣(LeetCode) 链接: https://leetcode-cn.com

LeetCode All in One 题目讲解汇总(持续更新中...)

情到浓时终转凉″ 提交于 2020-03-25 21:44:22
We are given an array A of positive integers, and two positive integers L and R ( L <= R ). Return the number of (contiguous, non-empty) subarrays such that the value of the maximum array element in that subarray is at least L and at most R . Example : Input: A = [2, 1, 4, 3] L = 2 R = 3 Output: 3 Explanation: There are three subarrays that meet the requirements: [2], [2, 1], [3]. Note: L, R and A[i] will be an integer in the range [0, 10^9] . The length of A will be in the range of [1, 50000] . 这道题给了我们一个数组,又给了我们两个数字L和R,表示一个区间范围,让我们求有多少个这样的子数组,使得其最大值在[L, R]区间的范围内。既然是求子数组的问题,那么最直接

LeetCode:Odd Even Linked List

大憨熊 提交于 2020-03-25 20:49:30
3 月,跳不动了?>>> 1、题目名称 Odd Even Linked List(链表内元素按奇偶位置重新排序) 2、题目地址 https://leetcode.com/problems/odd-even-linked-list/ 3、题目内容 英文: Given a singly linked list, group all odd nodes together followed by the even nodes. Please note here we are talking about the node number and not the value in the nodes. You should try to do it in place. The program should run in O(1) space complexity and O(nodes) time complexity. Example: Given 1->2->3->4->5->NULL , return 1->3->5->2->4->NULL . 中文: 给出一个链表,将所有奇数位置的节点和偶数位置的节点都归拢到一起,将偶数位置的节点放在所有奇数位置节点的后面。例如,给出链表1->2->3->4->5->NULL,应返回链表1->3->5->2->4->NULL。注意 4、解题方法

LeetCode | 1386. Cinema Seat Allocation安排电影院座位【Python】

房东的猫 提交于 2020-03-24 09:30:48
LeetCode 1386. Cinema Seat Allocation安排电影院座位【Medium】【Python】【哈希表】 Problem LeetCode A cinema has n rows of seats, numbered from 1 to n and there are ten seats in each row, labelled from 1 to 10 as shown in the figure above. Given the array reservedSeats containing the numbers of seats already reserved, for example, reservedSeats[i]=[3,8] means the seat located in row 3 and labelled with 8 is already reserved. Return the maximum number of four-person families you can allocate on the cinema seats. A four-person family occupies fours seats in one row , that are next to each other . Seats across an

[Leetcode Weekly Contest]181

天大地大妈咪最大 提交于 2020-03-24 08:41:29
链接: LeetCode [Leetcode]1389. 按既定顺序创建目标数组 给你两个整数数组 nums 和 index。你需要按照以下规则创建目标数组: 目标数组 target 最初为空。 按从左到右的顺序依次读取 nums[i] 和 index[i],在 target 数组中的下标 index[i] 处插入值 nums[i] 。 重复上一步,直到在 nums 和 index 中都没有要读取的元素。 请你返回目标数组。 题目保证数字插入位置总是存在。 直接insert即可,如下。 class Solution: def createTargetArray(self, nums: List[int], index: List[int]) -> List[int]: res = [] for i in range(len(index)): res.insert(index[i],nums[i]) return res [Leetcode]1390. 四因数 给你一个整数数组 nums,请你返回该数组中恰有四个因数的这些整数的各因数之和。 如果数组中不存在满足题意的整数,则返回 0 。 示例: 输入: \(nums = [21,4,7]\) 输出:32 解释: 21 有 4 个因数:1, 3, 7, 21 4 有 3 个因数:1, 2, 4 7 有 2 个因数:1, 7 答案仅为