leetcode

Leetcode算法Java全解答--34. 在排序数组中查找元素的第一个和最后一个位置

时间秒杀一切 提交于 2019-12-04 00:45:06
Leetcode算法Java全解答–34. 在排序数组中查找元素的第一个和最后一个位置 文章目录 Leetcode算法Java全解答--34. 在排序数组中查找元素的第一个和最后一个位置 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是 O(log n) 级别。 如果数组中不存在目标值,返回 [-1, -1]。 示例: 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: [3,4] 示例 2: 输入: nums = [5,7,7,8,8,10], target = 6 输出: [-1,-1] 想法 无限中分,找到目标值的位置(targetIndex) 根据targetIndex往左右2遍扩散 左边就是最小值,右边就是最大值 结果 超过75%的测试案例 时间复杂度/空间复杂度: log n/ 1 总结 代码 我的答案 public int[] searchRange(int[] nums, int target) { if(nums.length==0){ return new int[]{-1,-1}; } int left = 0; int right = nums

LeetCode 1 : Two Sum ---- 哈希&数组

懵懂的女人 提交于 2019-12-04 00:44:08
原题链接: https://leetcode.com/problems/two-sum/ 一:原题内容 Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solution. Example: Given nums = [2, 7, 11, 15], target = 9, Because nums[ 0 ] + nums[ 1 ] = 2 + 7 = 9, return [ 0 , 1 ]. 二:AC代码 class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> v(2,-1); map<int,int> m; for(int i=0;i<nums.size();i++) { if(m.find(target-nums[i])==m.end())//not find m[nums[i]]=i; else { v[0]=m[target-nums[i]]; v[1]=i; return v; } }

Leetcode算法Java全解答--39. 组合总和

时光总嘲笑我的痴心妄想 提交于 2019-12-04 00:43:00
Leetcode算法Java全解答–39. 组合总和 文章目录 Leetcode算法Java全解答--39. 组合总和 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明: 所有数字(包括 target)都是正整数。 解集不能包含重复的组合。 示例: 示例 1: 输入: candidates = [2,3,6,7], target = 7, 所求解集为: [ [7], [2,2,3] ] 示例 2: 输入: candidates = [2,3,5], target = 8, 所求解集为: [ [2,2,2,2], [2,3,3], [3,5] ] 想法 // TODO 结果 // TODO 总结 // TODO 代码 我的答案 public List<List<Integer>> combinationSum(int[] candidates, int target) { List<List<Integer>> resultList = new ArrayList<>(); List<Integer> result = new ArrayList<>

leetcode convert-sorted-array-to-binary-search-tree(Java)

早过忘川 提交于 2019-12-04 00:42:48
leetcode题目 convert-sorted-array-to-binary-search-tree -- newcoder 41 将有序数组转换为二叉搜索树 -- leetcode 108 题目描述 Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 示例: 给定有序数组: [-10,-3,0,5,9], 一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5 思路 * 1、获取中间元素,根节点为中间元素 * 2、递归处理数组的其他元素 代码 package com.my.test.leetcode.tree; /** * 题目: * convert-sorted-array-to-binary-search-tree -- newcoder 41 * 将有序数组转换为二叉搜索树 -- leetcode 108 * * 题目描述: * Given an array where elements are sorted in ascending order,

秋招还有 1 个月到达战场,请做好准备 !

♀尐吖头ヾ 提交于 2019-12-03 20:42:49
不知不觉就到了六月份,六月本属于夏天,为什么说秋招快要开始了呢,实际上,秋招的这个“秋”字早就名不副实了,现在的大公司都喜欢在秋招之前就开始内推、招聘提前批学生,而提前批招聘的最早时间点大概就是6月底7月初的时候。 不过,这个时间点开始招聘的基本上都是技术岗位,也就是程序员,同为程序猿的我,希望借这篇文章,提醒各位即将参加校园招聘的朋友,真的不早了,你准备好迎接秋招了吗,这可能是你离大厂理想最近的一次机会。 去年的这个时候,我就已经想好,这个月是我最后复习的一个月,从7月开始,提前批就是我的主战场,开始内推、投简历、笔试面试,尽量在提前批能够拿到满意的offer,这样一来就可以避免在秋招的时候才疲于奔命。 本着这样的一个想法,我在秋招提前批就拿到了bat的研发offer,然后在秋招期间又拿到了网易、滴滴、头条、华为、亚马逊等offer,基本上是我能想到的最好的结果了。 当然,这之前我复习了大概3个月左右的时间,这只是复习时间,我在研究生两年时间里基本上也都在学习,最终的目标自然就是秋招,两年的学习时间+3个月的最后冲刺复习时间,能拿到这样一个结果,其实也不是特别意外的事情,当然,这也和我对校园招聘比较好的理解密不可分。 在战略上轻视对手,在战术上要重视对手。为什么说秋招提前批是你拿到offer的最好机会呢,因为这个阶段参加招聘的同学并不多,很多同学要么在公司实习

[Leetcode]636. Exclusive Time of Functions

半腔热情 提交于 2019-12-03 20:18:33
链接: LeetCode636 给一个 \(n\) 个函数运行记录的log数组,表示非抢占式CPU调用函数的情况,即同时只能运行一个函数。格式为 \(id:start\ or\ end:time\) ,求每个函数占用cpu的总时间。 Input: n = \(2\) logs = \(["0:start:0","1:start:2","1:end:5","0:end:6"]\) Output: \([3, 4]\) 相关标签: 栈 首先要弄明白一点:当遍历到logs中的某个字符串时,无论它是begin还是end,当前位于栈顶的元素都会占用 “当前字符串的timePoint-之前字符串的timePoint”(或+1) 时间。 因为如果当前遍历到的字符串是start,那么栈顶元素就是之前start了还没结束的function,在 当前时间点 和 上一个时间点 之间的这段时间,是被栈顶元素占用的,占用了 “当前字符串的timePoint-之前字符串的timePoint” 时间。 算法的关键在于:拿到上一个log的 start/stop time 设为prev,再拿到当前 log 的 start/stop time ,计算出两个time之间的时间差。这也可以同比为,每次计算一个log的占用时间delta,将栈里面的数都减去delta。 python: class Solution: def

回顾总结与重启

余生长醉 提交于 2019-12-03 16:48:12
两年时间,LeetCode刷了600+的同时,我也了解、训练了很多经典的数据结构与算法问题。在刷题的过程中,对数据结构与算法有了更深的了解,对Python语言做了更多的实践。我相信,刷题不只是为了找工作,更多也是在提升自己。在此,记录自己刷题的总结与感悟。 我相信刷题的过程中有三种境界: 1、模仿与记忆。第一过程是最艰难,也是最基础的。对于没什么算法基础的同学,一开始接触KMP算法,马拉车算法,很难能够做到看一遍就会,做一遍就能默写的程度。这是反复的过程,只有多刷几遍相关题型,才能理解、领悟使用这种数据类型或者使用这种算法的技巧与优势。这一阶段要做到:給一道做过的题,能很快的回想起其使用的算法与算法的具体过程和本质。 2、分析与总结。这一阶段,我谓之培养“题感”的过程,也就是学习刷题套路的过程。在总结的过程中,才能真正了解为什么这种题要用这个数据类型,为什么这样能降低时间复杂度,下次什么题型也能采用这种技巧来解题。这一阶段要做到:给一类题型,能很快回想起该题型常用的技巧和算法,并能举出一二道最经典的例题。我之前的文章也大多是此类总结。 举个例子,比如要求一个数组中最长/最短达到某个条件的连续子数组,不妨考虑下以每个元素开始/结尾的时候,最长/最短的连续子数组。 3、思考与泛化。当做过一定量的题后,你已经对常用的数据结构、算法了然于胸,对于一道熟悉的新题

前端与算法 leetcode 189. 旋转数组

孤街浪徒 提交于 2019-12-03 14:55:20
目录 # 前端与算法 leetcode 189. 旋转数组 题目描述 概要 提示 解析 算法 # 前端与算法 leetcode 189. 旋转数组 题目描述 189. 旋转数组 概要 把他当做一到简单的题来做,不要想太多了就好也可以不整那些花里胡哨的,直接旋转数组n次,我一开始也想到了这个办法,但是觉得太简单而且效率低下,想了很久也没想到合适的办法 提示 使用额外的数组 解析 用一个额外的数组将每个元素放到对应的位置就好 下标为i的位置对应(i+k)%数组长度 ,然后把新的数组拷贝(深拷贝)到原数组即可 算法 /** * @param {number[]} nums * @param {number} k * @return {void} Do not return anything, modify nums in-place instead. */ var rotate = function (nums, k) { const re = [] for (let i = 0; i < nums.length; i++) { re[(i + k) % nums.length] = nums[i] } for (let j = 0; j < nums.length; j++) { nums[j] = re[j] } } 传入 [1,2,3,4,5,6,7] 3 的运行结果 [5,6,7

力扣刷题总结

允我心安 提交于 2019-12-03 14:31:08
刷题总结 1,count数组 #include <iostream> #include <unordered_map> using namespace std; // 输入: 11223344455 // 输出:{1:2, 2: 2, 3: 2, 4: 3, 5: 1} void printNums(vector<int> nums) { for(int i = 0; i < nums.size(); i++) { cout << nums[i] << '\t'; } } vector<pair<int,int>> analysis(vector<int> nums) { unordered_map<int, int> mp; for(int i = 0; i < nums.size(); i++) { if(mp.find(nums[i]) == mp.end()) { mp.insert(pair(nums[i], 1)); } else { mp[nums[i]] = mp.find(nums[i])->second + 1; } } vector<pair<int, int>> result(mp.begin(), mp.end()); sort(result.begin(), result.end(), [](pair<int,int>&a, pair<int, int>

[LeetCode] 922. Sort Array By Parity II 按奇偶排序数组之二

久未见 提交于 2019-12-03 12:27:53
Given an array A of non-negative integers, half of the integers in A are odd, and half of the integers are even. Sort the array so that whenever A[i] is odd, i is odd; and whenever A[i] is even, i is even. You may return any answer array that satisfies this condition. Example 1: Input: [4,2,5,7] Output: [4,5,2,7] Explanation: [4,7,2,5], [2,5,4,7], [2,7,4,5] would also have been accepted. Note: 2 <= A.length <= 20000 A.length % 2 == 0 0 <= A[i] <= 1000 Github 同步地址: https://github.com/grandyang/leetcode/issues/922 类似题目: Sort Array By Parity 参考资料: https://leetcode.com/problems/sort-array-by