![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leecode-二分和分治
hebastast
这个作者很懒,什么都没留下…
展开
-
面试题 寻找缺失的页码
题目是这样的,给定一本书的打乱的页码 书缺少了一页怎么找出缺少的那个页 (1).最简单的方式是对整个页码进行排序 nlogn 排序 然后进行遍历 看后一个元素与前一个元素的差值 如果不是为1则就找到了缺失的那一页 (2).使用一个bitset数组 (需要一个n长度的空间) 然后对整个数组进行遍历 将数组元素对应的下标置为1 最后查找整个bitset数组中不为1的下标 就找到了缺失的地方原创 2015-12-13 15:52:51 · 953 阅读 · 0 评论 -
93. Restore IP Addresses
枚举class Solution {public: vector<string> restoreIpAddresses(string s) { vector<string> ret; string ans; for (int a=1; a<=3; a++) for (int b=1; b<=3; b++)原创 2016-05-25 10:19:10 · 541 阅读 · 0 评论 -
108. Convert Sorted Array to Binary Search Tree
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class原创 2016-05-27 09:17:46 · 312 阅读 · 0 评论 -
4. Median of Two Sorted Arrays
在寻找两个已经排好序的数组的第k小的元素的时候参考了下面一篇博客 http://blog.csdn.net/beiyeqingteng/article/details/7533304/class Solution {private: int findK(vector<int>& nums1,int pa,vector<int>& nums2,int setpa,int k) {原创 2016-05-30 10:29:36 · 338 阅读 · 0 评论 -
95. Unique Binary Search Trees II
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class原创 2016-05-23 19:54:36 · 306 阅读 · 0 评论 -
53. Maximum Subarray
使用分治法来解题。 (1)只有0个元素或者1个元素 则直接返回 (2)求出middle位置 最大值 要么在middle左边 要么右边 要么两边都有 返回三种解法的最大值 则为最大值class Solution {private:int maxSub(vector<int>&nums,int left,int right){ if(left==right) retu原创 2016-06-15 01:04:28 · 284 阅读 · 0 评论 -
215. Kth Largest Element in an Array
class Solution {private: void swap(vector<int>&nums,int i,int j) { int temp=nums[i]; nums[i]=nums[j]; nums[j]=temp; } int quickSelect(vector<int>&nums,int l,int原创 2016-10-19 21:41:50 · 266 阅读 · 0 评论 -
327. Count of Range Sum
class Solution {private: int countHelper(vector<long>&sum,int start,int end,int lower,int upper) { if(end-start<=1)//sum个数小于等于1无法求范围 return 0; int mid=(start+end)/2原创 2016-12-03 15:19:40 · 438 阅读 · 0 评论 -
410. Split Array Largest Sum
class Solution {private: bool valid(int target,vector<int>& nums,int m) { int count=1;//count应该初始化1 int total=0; for(int num:nums) { total+=num;原创 2017-02-06 15:08:51 · 295 阅读 · 0 评论 -
395. Longest Substring with At Least K Repeating Characters
public class Solution { public int longestSubstring(String s, int k) { char [] string =s.toCharArray(); return helper(string,0,s.length(),k);//求每个字符的出现次数 都 >=k 的最长子字符串的长度 }原创 2017-01-12 11:12:00 · 261 阅读 · 0 评论 -
84. Largest Rectangle in Histogram
详细的解释可以看下下面链接的博客 http://www.cnblogs.com/hxsyl/archive/2012/08/16/2643015.htmlclass Solution {private: struct node{ int width; int height; };public: int largestRectangleAr原创 2016-04-28 23:15:38 · 296 阅读 · 0 评论 -
81. Search in Rotated Sorted Array II
class Solution {public: bool search(vector<int>& nums, int target) { int start,end,mid; start=0; end=nums.size()-1; while(start<=end) { mid=(sta原创 2016-04-27 09:55:39 · 312 阅读 · 0 评论 -
利用分治法来求两个排序数组的中位数
有两个数组 ar1[] 和ar2[] 两个数组的长度都为n 求ar1[]和ar2[]的中位数 可以借鉴归并排序的思想 实质上就是将将两个已经排好序的数组 合并成一个数组 的过程只是在这个过程中添加了一个计算从小到大的次序的数 (count ) 当count =n 和n+1时记录下这两个数 然后在这两个数中间取平均值 就可以了 但是这个算法的复杂度是o(n)如果我们想达到log(n)的复杂度的原创 2015-12-20 20:23:57 · 5163 阅读 · 1 评论 -
different-ways-to-add-parentheses
https://leetcode.com/problems/different-ways-to-add-parentheses/ 使用递归 枚举出所有的可能情况再相加相减或者相乘#include <vector>#include <string>using namespace std;class Solution {public: vector<int> diffWaysToComp原创 2016-03-01 20:48:31 · 367 阅读 · 0 评论 -
Search a 2D Matrix
#include <vector>using namespace std;class Solution {private: bool search(vector<vector<int>>&ma, int start, int end, int target,int&column) { if (end < start) return fal原创 2016-03-01 21:57:35 · 341 阅读 · 0 评论 -
Search a 2D Matrix II
https://leetcode.com/problems/search-a-2d-matrix-ii/ 在搜索的时候从右上角开始搜索 假设当前的搜索值为matrix[i][j] 如果当前值小于target则将i++ 搜索下一行 如果当前值大于target则 说明当前列没有target j– 当i 或者j到达了边界 而没有搜索到target则说明没有找到#include <vector>原创 2016-03-01 22:27:15 · 323 阅读 · 0 评论 -
Search in Rotated Sorted Array
采用二分的思路对于数组 二分之后只可能出现上图3种情况 对于每种情况 每次搜索原来范围的一半#include <iostream>#include <vector>using namespace std;class Solution {public: int search(vector<int>& nums, int target) { return searchb原创 2016-02-26 14:44:14 · 397 阅读 · 0 评论 -
34. Search for a Range
class Solution {private: int binerySearch(vector<int>&nums,int searchnum,int start,int end) { if(start<=end) { int mid=(start+end)/2; if(nums[mid]==sear原创 2016-04-26 10:45:29 · 284 阅读 · 0 评论 -
69. Sqrt(x)
class Solution {public: int mySqrt(int x) { unsigned long long begin = 0; unsigned long long end = x; unsigned long long mid; unsigned long long tmp;原创 2016-04-26 11:34:42 · 338 阅读 · 0 评论 -
35. Search Insert Position
class Solution {public: int searchInsert(vector<int>& nums, int target) { int start; int end; start=0; end=nums.size()-1; while(start<=end) {原创 2016-04-26 22:50:55 · 268 阅读 · 0 评论 -
33. Search in Rotated Sorted Array
class Solution {public: int search(vector<int>& nums, int target) { int start,end,mid; start=0; end=nums.size()-1; while(start<=end) { mid=(star原创 2016-04-26 23:12:45 · 258 阅读 · 0 评论 -
leetcode Find Minimum in Rotated Sorted Array
leetcode Find Minimum in Rotated Sorted Array https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/ 题目的意思就是将一个有序数组进行旋转使得有序数组不部分有序 来查找这个有序数组中的最小值 这里采用的是log(n)的算法 l为左边界 r为右边届 m=l+(r-l原创 2015-11-20 22:17:39 · 420 阅读 · 0 评论