- 浏览: 138711 次
文章分类
- 全部博客 (189)
- Tree (14)
- Dynamic Programming (34)
- Array (20)
- Search (1)
- Hash (12)
- Backtracking (22)
- Divide and Conque (8)
- Greedy (6)
- Stack (12)
- software (0)
- List (7)
- Math (22)
- Two pointers (16)
- String (20)
- Linux (1)
- Sliding Window (4)
- Finite State Machine (1)
- Breadth-first Search (7)
- Graph (4)
- DFS (6)
- BFS (3)
- Sort (9)
- 基础概念 (2)
- 沟通表达 (0)
- Heap (2)
- Binary Search (15)
- 小结 (1)
- Bit Manipulation (8)
- Union Find (4)
- Topological Sort (1)
- PriorityQueue (1)
- Design Pattern (1)
- Design (1)
- Iterator (1)
- Queue (1)
最新评论
-
likesky3:
看了数据结构书得知并不是迭代和递归的区别,yb君的写法的效果是 ...
Leetcode - Graph Valid Tree -
likesky3:
迭代和递归的区别吧~
Leetcode - Graph Valid Tree -
qb_2008:
还有一种find写法:int find(int p) { i ...
Leetcode - Graph Valid Tree -
qb_2008:
要看懂这些技巧的代码确实比较困难。我是这么看懂的:1. 明白这 ...
Leetcode - Single Num II -
qb_2008:
public int singleNumber2(int[] ...
Leetcode - Single Num II
[分析]
这道题思路直接,但bug free需要费些心力。第一版未优化的代码笔记长,未贴。
下面给出的两个实现,实现1是使用二分法找到新区间应插入的位置,然后检查是否需要和上一个区间合并(容易忽略),最后同后面的区间逐个检查是否需要合并。无需额外空间,Code Ganker 指出这种做法严格上非O(N),因为合并时有数组remove操作,最坏情况下是O(N^2),但跑leetcode测试用例这种实现比实现2效率高。
实现2:代码非常简洁,需要使用额外空间。先跳过新区间无交集且在新区间前面的,然后merge 和新区间有交集的,最后加上剩余的。
[ref]
http://blog.csdn.net/linhuanmars/article/details/22238433
http://blog.csdn.net/kenden23/article/details/17264441
这道题思路直接,但bug free需要费些心力。第一版未优化的代码笔记长,未贴。
下面给出的两个实现,实现1是使用二分法找到新区间应插入的位置,然后检查是否需要和上一个区间合并(容易忽略),最后同后面的区间逐个检查是否需要合并。无需额外空间,Code Ganker 指出这种做法严格上非O(N),因为合并时有数组remove操作,最坏情况下是O(N^2),但跑leetcode测试用例这种实现比实现2效率高。
实现2:代码非常简洁,需要使用额外空间。先跳过新区间无交集且在新区间前面的,然后merge 和新区间有交集的,最后加上剩余的。
[ref]
http://blog.csdn.net/linhuanmars/article/details/22238433
http://blog.csdn.net/kenden23/article/details/17264441
/** * Definition for an interval. * public class Interval { * int start; * int end; * Interval() { start = 0; end = 0; } * Interval(int s, int e) { start = s; end = e; } * } */ public class Solution { // Method 2: 使用额外空间,Time:O(N) public List<Interval> insert2(List<Interval> intervals, Interval newInterval) { List<Interval> result = new ArrayList<Interval>(); int i = 0; int N = intervals.size(); while (i < N && newInterval.start > intervals.get(i).end) { result.add(intervals.get(i++)); } if (i < N) { newInterval.start = Math.min(newInterval.start, intervals.get(i).start); } while (i < N && newInterval.end >= intervals.get(i).start) { newInterval.end = Math.max(newInterval.end, intervals.get(i++).end); } result.add(newInterval); while (i < N) { result.add(intervals.get(i++)); } return result; } // Method 1: 二分法查找插入位置,无额外空间 public List<Interval> insert(List<Interval> intervals, Interval newInterval) { if (intervals == null || intervals.size() == 0) { List<Interval> result = new ArrayList<Interval>(); result.add(newInterval); return result; } int N = intervals.size(); int i = findInsertPos(intervals, newInterval.start); // 判断是否需要和前一个区间merge if (i > 0 && intervals.get(i - 1).end >= newInterval.start) { newInterval.start = intervals.get(i - 1).start; newInterval.end = Math.max(newInterval.end, intervals.get(i - 1).end); intervals.remove(--i); } intervals.add(i, newInterval); i++; // 合并同newInterval有交集的区间 while (i < intervals.size() && newInterval.end >= intervals.get(i).start) { newInterval.end = Math.max(newInterval.end, intervals.get(i).end); intervals.remove(i); } return intervals; } public int findInsertPos(List<Interval> intervals, int target) { int left = 0, right = intervals.size() - 1; int mid = 0; while (left <= right) { mid = left + ((right - left) >> 1); Interval curr = intervals.get(mid); if (curr.start == target) return mid; else if (curr.start > target) right = mid - 1; else left = mid + 1; } return left; } }
发表评论
-
Smallest Rectangle Enclosing Black Pixels
2016-02-13 12:39 907An image is represented by a bi ... -
Leetcode - H-Index II
2015-09-06 09:39 1106Follow up for H-Index: What if ... -
Leetcode - H-Index
2015-09-06 09:08 1131Given an array of citations (ea ... -
Leetcode - Add Binary
2015-08-21 09:28 477[分析] 从低位往高位逐位相加,就是这么一个简单的题却花了我一 ... -
Leetcode - Longest Consecutive Sequence
2015-08-20 21:20 494[分析] base version说几句: 数组题一定要考虑重 ... -
Leetcode - First Missing Positive
2015-08-20 07:45 662[分析] 将各个正数放入相应下标处,使之满足nums[nums ... -
Leetcode - Set Matrix Zeros
2015-08-19 20:55 562Given a m x n matrix, if an ele ... -
Leetcode - Rotate Image
2015-08-19 19:51 504[分析] 自己的思路:从外到内一圈圈顺时针旋转90度,坐标映射 ... -
Missing Ranges
2015-08-19 09:48 518[分析] 此题若不考虑极大值极小值相关的corner case ... -
Leetcode - 3Sum Smaller
2015-08-18 22:12 1493Given an array of n integers nu ... -
Leetcode - Spiral Matrix II
2015-08-18 19:49 505Given an integer n, generate a ... -
Leetcode - Spiral Matrix
2015-08-18 09:50 434Given a matrix of m x n element ... -
Leetcode - Contains Duplicate II
2015-08-18 07:57 567Given an array of integers and ... -
Leetcode - Shortest Word Distance II
2015-08-18 07:25 1372This is a follow up of Shortest ... -
Leetcode - Shortest Word Distance III
2015-08-17 22:05 1675This is a follow up of Shortest ... -
Leetcode - Shortest Word Distance
2015-08-17 22:01 929Given a list of words and two w ... -
Leetcode - Maximum Gap
2015-08-16 10:17 516Given an unsorted array, find t ... -
Leetcode - Largest Number
2015-08-15 20:16 596Given a list of non negative in ... -
Leetcode - Insertion Sort List
2015-08-15 19:27 670Sort a linked list using insert ... -
Leetcode - Sort List
2015-08-15 17:41 503Sort a linked list in O(n log n ...
相关推荐
js js_leetcode题解之57-insert-interval.js
java java_leetcode题解之Insert Interval.java
- Insert Interval: 在一组已经排序的区间中,插入一个新的区间。 - Rotate List: 给定一个链表的头节点head,当旋转了k个位置后,返回链表的新头节点。 - Unique Paths / Unique Paths II: 前者计算从矩阵的左上角...
颜色分类leetcode leetcode.etc My solutions of the problems in Online judge website, leetcode, lintcode, etc. leetcode: 13 ...Insert Interval Easy Two Strings Are Anagrams(比较字符串) E
10. Insert Interval 区间插入是一个数组问题,要求将一个区间插入到已经排序的区间数组中。可以使用二分搜索来解决该问题。 11. Two Sum 两数之和是一个经典的数组问题,要求找到数组中两个元素之和等于目标值的...
Interval 解决方法:遍历 LeetCode: 229. Majority Element II 解决方法:Majority Voting算法的变种。但是最终的算法实现形式,很难理解。 2018-08-19 19:16 LeetCode: 79. Word Search 解决方法:DFS LeetCode: 31...
# [LeetCode](https://leetcode.com/problemset/algorithms/) ![Language](https://img.shields.io/badge/language-Python%20%2F%20C++%2011-orange.svg) [![License]...
* Insert Interval:该题目要求将一个区间插入到另一个区间中,实现方法使用了排序和迭代算法。 三、字符串和动态规划 * String to Integer (atoi):该题目要求将字符串转换成整数,实现方法使用了状态机算法。 * ...
在本资源包中,我们关注的是C语言的学习以及如何通过LeetCode平台进行编程练习,特别是针对第57题“插入区间”(Insert Interval)的解题方法。LeetCode是一个在线平台,提供了各种算法题目,旨在帮助程序员提升技能...
def insert(self, intervals, new_interval): intervals.append(new_interval) intervals.sort(key=lambda x: x.start) merged_intervals = [] for interval in intervals: if not merged_intervals or ...
5. **Merge Intervals(using (Insert Interval) ).cpp** - 这是第56题“合并区间”的解冑,涉及到区间操作,尤其是如何有效地插入新区间并合并重叠区间。 6. **Integer to Roman.cpp** - 第40题,与“Roman to ...
第57题,"插入区间"(Insert Interval),是其中一道挑战性较高的问题,旨在检验开发者对区间操作、数据结构以及排序算法的理解。下面将详细探讨这个问题的背景、解题策略以及相关的C++编程知识点。 问题描述: ...
leetcode 力码 【吾生也有涯,而知也无涯。】 刷题解题记录: 大批: 220 包含重复 III 考 55 跳跃游戏45 跳跃游戏 II121 买卖股票的最佳时机 122 买卖股票的最佳时机 II123 买卖股票的最佳时机 III188 买卖股票的...
12 Insert Interval 45 13 Two Sum 47 14 Two Sum II Input array is sorted 49 15 Two Sum III Data structure design 51 16 3Sum 53 17 4Sum 55 18 3Sum Closest 57 19 String to Integer (atoi) 59 20 Merge ...