leetcode

【leetcode】Find Minimum in Rotated Sorted Array I&&II

冷暖自知 提交于 2020-03-08 23:44:41
题目概述: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). Find the minimum element. You may assume no duplicate exists in the array. 解题思路: 在一个有顺序的数组中查找个最小值,很容易想到的就是二分法,的确,这里用的就是二分,不过要做一点改进。 改进的思路是这样的: 1.我们容易想到最好的情况就是这个数组是普通的排好序的,如【1,2,3,4】,那么最小的必然是下标最小的。用旋转的情况假设第一个小于最后一个那么最小值肯定也是第一个,也就是说计算过程中只要找到left<right的结果就出来了 2、如果这里面出现了rotate的话,如【3,4,1,2】那么最小值肯定会出现在左右的一遍,那么到底是哪边呢,这里我们可以比较最左和最后值的大小,比如这里`3="">2 说明在这里前面的那个3是旋转过去的。这是后我们就要用中间那个值,这里是 (0+3)/2=1`这里4>2(right)说明最小值应该实在后半块里的,于是乎改left就好。反之是改right就是一样的过程了,就是一个二分的思想 1 class

LeetCode 第 21 场双周赛(779/1913,前40.7%)

。_饼干妹妹 提交于 2020-03-08 09:57:07
文章目录 1. 比赛结果 2. 题目 LeetCode 5336. 上升下降字符串 easy LeetCode 5337. 每个元音包含偶数次的最长子字符串 medium LeetCode 5338. 二叉树中的最长交错路径 medium LeetCode 5339. 二叉搜索子树的最大键值和 hard 1. 比赛结果 只做出来了第1题,第3题有一个例子超时,没解决 全国排名:779 / 1913,40.7%;全球排名:2027 / 4729,42.8% 2. 题目 LeetCode 5336. 上升下降字符串 easy 题目链接 给你一个字符串 s ,请你根据下面的算法重新构造字符串: 从 s 中选出 最小 的字符,将它 接在 结果字符串的 后面 。 从 s 剩余字符中选出 最小 的字符,且该字符比上一个添加的字符大,将它 接在 结果字符串后面。 重复步骤 2 ,直到你没法从 s 中选择字符。 从 s 中选出 最大 的字符,将它 接在 结果字符串的 后面 。 从 s 剩余字符中选出 最大 的字符,且该字符比上一个添加的字符小,将它 接在 结果字符串后面。 重复步骤 5 ,直到你没法从 s 中选择字符。 重复步骤 1 到 6 ,直到 s 中所有字符都已经被选过。 在任何一步中,如果最小或者最大字符不止一个 ,你可以选择其中任意一个,并将其添加到结果字符串。 请你返回将 s

LeetCode 77. Combinations (组合)

蓝咒 提交于 2020-03-08 07:16:36
题目标签:Backtracking   利用dfs,建立一个 tempList 递归加入 1.2.3.4....直到 size = k 就存入 res 返回;   具体看code。 Java Solution: Runtime: 28 ms, faster than 22.99% Memory Usage: 42.6 MB, less than 6.52 % 完成日期:12/07/2019 关键点:dfs class Solution { List<List<Integer>> res; public List<List<Integer>> combine(int n, int k) { res = new ArrayList<>(); List<Integer> tempList = new ArrayList<>(); dfs(tempList, n, k); return res; } private void dfs(List<Integer> tempList, int n, int k) { if(tempList.size() == k) { res.add(new ArrayList<>(tempList)); return; } // start from next number int i = tempList.isEmpty() ? 1 : tempList

LeetCode 1005. Maximize Sum Of Array After K Negations (K 次取反后最大化的数组和)

人走茶凉 提交于 2020-03-08 06:39:40
题目标签:Greedy   每一次都找最小的值 进行更改。   可以利用 priority queue 来实现操作。   具体看code。 Java Solution: Runtime: 5 ms, faster than 33.84% Memory Usage: 38.6 MB, less than 11.76 % 完成日期:02/26/2020 关键点:priority queue class Solution { public int largestSumAfterKNegations(int[] A, int K) { PriorityQueue<Integer> pq = new PriorityQueue<Integer>(); int sum = 0; for(int x: A) { pq.add(x); } while( K-- > 0) { pq.add(-pq.poll()); } for(int i = 0; i < A.length; i++) { sum += pq.poll(); } return sum; } } 参考资料:LeetCode Discuss LeetCode 题目列表 - LeetCode Questions List 题目来源:https://leetcode.com/ 来源: https://www.cnblogs.com

LeetCode 买卖股票的最佳时机III

大兔子大兔子 提交于 2020-03-08 02:52:32
LeetCode 买卖股票的最佳时机III 题目 示例 思路 本题试了很多次思路都没能解决这个问题,然后学习了LeetCode的一些解法,最后学习了老马的解题思路,得以完成这个题。 代码来源: https://mp.weixin.qq.com/s/0QZM_HXpPEkymeZlopwoSw 代码 int maxProfit ( int * prices , int pricesSize ) { if ( pricesSize == 0 ) { return 0 ; } int [ ] leftMaxProfit = new int [ prices . Length ] ; int minPrice = prices [ 0 ] ; for ( int i = 1 ; i < pricesSize ; i ++ ) { if ( minPrice > prices [ i ] ) { minPrice = prices [ i ] ; } leftMaxProfit [ i ] = Max ( prices [ i ] - minPrice , leftMaxProfit [ i - 1 ] ) ; } int [ ] rightMaxProfit = new int [ pricesSize ] ; int maxPrice = prices [ pricesSize - 1

[LeetCode] 738. Monotone Increasing Digits 单调递增数字

落爺英雄遲暮 提交于 2020-03-07 13:08:58
Given a non-negative integer N , find the largest number that is less than or equal to N with monotone increasing digits. (Recall that an integer has monotone increasing digits if and only if each pair of adjacent digits x and y satisfy x <= y .) Example 1: Input: N = 10 Output: 9 Example 2: Input: N = 1234 Output: 1234 Example 3: Input: N = 332 Output: 299 Note: N is an integer in the range [0, 10^9] . 这道题给了一个非负数,让我们求一个数字小于等于给定数字,且该数字各位上的数字是单调递增的。先来分析题目中给的几个例子吧,首先如果是 10 的话,由于1大于0,所以不是单调自增的,那么返回的数就是9。第二个例子是 1234,各位上已经满足单调自增的条件了,返回原数即可。第三个例子是 332,最后一位2小于之前的3,那么此时将前面位减1,先变成322,再往前看,还是小于前面的3

26. Remove Duplicates from Sorted Array

廉价感情. 提交于 2020-03-07 08:19:26
前言:继几个月前做了50题左右的Leetcode以来,没有再次接触过类似的训练。在学习了数据结构之后,为了增强算法的训练,乘着Leetcode.CN的上线(感觉没了discuss就没了精髓),想系统性的记录一下解题过程和思路,为日后的复习提供便利。   首先,在 Leetcode.CN->探索->初级算法->数组 中按顺序刷题(顺序看这里,实际还是到英文网站阅读题干与讨论与解法)。需要说明的是,之前刷过的50题全是数组名下的,当时的水品大概为勉强解出medium题,所以对数组相对比较熟悉。   本文记录的是第一题: 从排序数组中删除重复项 (具体描述见超链接)。题目大概可表述为给定一个有序的数组,删除其中重复的元素并返回修改后的数组长度。题目描述很简单,很符合数组easy题的难度,但是值得注意的是,出题人在示例里加上了一句“ 不需要理会新的数组长度后面的元素 ”。   对此题的第一反应(just for the beginner)就是从第二项开始,依次遍历数组的每一项与前面一项作对比,如果比前一项大则保留,继续遍历下一项;如果与前一项相同,则将这一项之后的每一项向前移动一个位置,遍历的指针保持不变(算法一)。刚学到一个词,叫做TSSN(来自浙江大学MOOC《数据结构》陈越老师的会心一击)。用来形容这个算法呢,再合适不过了。根据算法的逻辑不难得出,该算法的时间复杂度为O(N 2 )

leetcode 119——杨辉三角Ⅱ

梦想的初衷 提交于 2020-03-06 23:53:50
leetcode 119——杨辉三角Ⅱ 题目描述: 给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。 在杨辉三角中,每个数是它左上方和右上方的数的和。 示例: 输入: 3 输出: [1,3,3,1] 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/pascals-triangle-ii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 提交: class Solution { public : vector < int > getRow ( int rowIndex ) { vector < int > ans ; for ( int i = 0 ; i <= rowIndex ; ++ i ) { ans . push_back ( 1 ) ; for ( int j = i - 1 ; j > 0 ; -- j ) { ans [ j ] + = ans [ j - 1 ] ; } } return ans ; } } ; 来源: CSDN 作者: 菜菜的哈士奇 链接: https://blog.csdn.net/weixin_44795839/article/details/104704368

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

☆樱花仙子☆ 提交于 2020-03-06 08:49:08
话说博主在写 Max Chunks To Make Sorted II 这篇帖子的解法四时,写到使用单调栈Monotone Stack的解法时,突然脑中触电一般,想起了之前曾经在此贴 LeetCode All in One 题目讲解汇总(持续更新中...) 的留言区中说要写单调栈的总结帖,当时答应了要写,就去 LeetCode 上看标记为 Stack 的题,可是发现有好多题,而且很多用的不是单调栈,于是博主一个一个的看了起来,但是无奈太多了,一直没有时间全部看完,就一直没有动笔写。虽说时间就像那啥,挤挤总会有的,但是这不一个恍惚,半年就过去了,如果博主再不开始写,等回过神来,绝对又是半年。于是,博主决定改变策略,不去看所有题的,而是好坏不多想,直接动笔先写个大概,留到以后慢慢补充完整吧。 好,废话不多说,来说单调栈吧。所谓的单调栈 Monotone Stack,就是栈内元素都是单调递增或者单调递减的,有时候需要严格的单调递增或递减,根据题目的具体情况来看吧。关于单调栈, 这个帖子 讲的不错,而且举了个排队的例子来类比。那么,博主也举个生动的例子来说明吧:比如有一天,某家店在发 free food,很多人在排队,于是你也赶过去凑热闹。但是由于来晚了,队伍已经很长了,想着不然就插个队啥的。但发现排在队伍最前面的都是一些有纹身的大佬,惹不起,只能赞美道,小猪佩奇身上纹,来世还做社会人

[LeetCode] 345. Reverse Vowels of a String

扶醉桌前 提交于 2020-03-06 04:43:20
反转字符串中的元音字母。题干即是题意。例子, Example 1: Input: "hello" Output: "holle" Example 2: Input: "leetcode" Output: "leotcede" 思路基本同 344题 。不同之处在于344题要求不能使用额外空间,但是本题非得使用额外空间才能解决,不仅需要hashset,也需要将input先转成数组才能判断。 时间O(n) 空间O(n) - hashset 1 /** 2 * @param {string} s 3 * @return {string} 4 */ 5 var reverseVowels = function (s) { 6 // corner case 7 if (s === null || s.length === 0) return ''; 8 9 // normal case 10 let res = s.split(''); 11 let vowels = new Set(['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']); 12 let left = 0; 13 let right = s.length - 1; 14 while (left < right) { 15 while (left < right &&