leetcode
所谓刹那
这个作者很懒,什么都没留下…
展开
-
leetcode 31. 下一个排列
思路: 1. 从后往前遍历,找到第一个比其后一个元素小的元素的位置。记为i; 2. 若i为-1,说明数组为降序序列,调整为升序;否则,从后往前,找到第一个比num[i]大的数,记为j,交换num[i]和nums[j],然后对i位置后的数组进行升序排序;void nextPermutation(vector<int>& nums) { int i=nums.si...原创 2018-08-04 20:55:10 · 165 阅读 · 0 评论 -
LeetCode 32. 最长有效括号
思路: 自己没想出来,参考了一下网上大神的提示。 使用一个int栈,将左括号记为-1,右括号记为-2;遍历字符串。 1. 若为‘(’,则直接压入栈; 2. 若为‘)’,分情况讨论: ①. 若栈顶为‘-2’或栈空,则直接将-2压入栈; ②. 若栈容量为1,且栈顶为-1,将-1推出栈,推入2,代表此时有一对匹配括号; ③. 若栈容量为1,且栈顶大于0,说明此右括号不能配对且阻断了前后括号...原创 2018-08-04 22:14:27 · 142 阅读 · 0 评论 -
LeetCode 35. 搜索插入位置
二分搜索竟然不如顺序遍历省时间……震惊 int searchInsert(vector<int>& nums, int target) { int l=0,r=nums.size()-1; while(l<r) { int mid=(l+r)/2; if(nums[mid]>...原创 2018-08-10 22:22:04 · 92 阅读 · 0 评论 -
LeetCode 36. 有效的数独
bool isValidSudoku(vector<vector<char>>& board) { int row[9][10]; int col[9][10]; int g[9][10]; memset(row,0,sizeof(row)); memset(col,0,size...原创 2018-08-10 22:47:46 · 124 阅读 · 0 评论 -
LeetCode 33. 搜索旋转排序数组
仍然使用二分法,但决定搜索半区需分情况讨论。 1. 如果nums[mid]&gt;nums[r],说明mid和r之间即右半区存在旋转点:①如果nums[r]&gt;target,在右半区搜索;②如果nums[mid]int search(vector&lt;int&gt;&amp; nums, int target) { int l=0,r=nums.size()-1,mid; ...原创 2018-08-06 22:26:30 · 211 阅读 · 0 评论 -
LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置
常规两次二分搜索。 第一次找第一个大于等于target的位置; 第二次找第一个大于target的位置; 注意排查末尾元素==target的情况。vector<int> searchRange(vector<int>& nums, int target) { int l=0,r=nums.size()-1,mid; vector<int...原创 2018-08-07 21:21:05 · 224 阅读 · 0 评论