自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 已知先序中序,构造二叉树

给定一棵树的前序遍历preorder与中序遍历inorder。请构造二叉树并返回其根节点法一:递归分治对于任意一颗树而言,前序遍历的形式总是[ 根节点, [左子树的前序遍历结果], [右子树的前序遍历结果] ]即根节点总是前序遍历中的第一个节点。而中序遍历的形式总是[ [左子树的中序遍历结果], 根节点, [右子树的中序遍历结果] ]只要我们在中序遍历中定位到根节点,那么我们就可以分别知道左子树和右子树中的节点数目。由于同一颗子树的前序遍历和中序遍历的长度显然是相同的,因此我...

2021-09-23 12:17:22 231 1

原创 找到所有数组中消失的数字

给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。由于这是要返回多个结果的,所以不能用异或。法一:哈希表。所以我们考虑用哈希表。简单地将nums进行哈希到另一个哈希表,并创建一个临时数组temp,此数组里数字i(1<=i<=n)存储在i-1的地方,然后查找哈希表,nums中存在的数字就在temp中赋值0,最终在结果向量res中整合。class Sol

2021-09-22 11:24:27 189

原创 2021-09-21

给你一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数法一:vector转set 再转回去。set能去除重复元素。class Solution {public: int thirdMax(vector<int>& nums) { //将 vector 转换为 set,set 数据结构自动去重 set<int>s(nums.begin(), nums.end()); //再将 set 转..

2021-09-21 14:40:29 134

原创 两个数的交集2

给定两个数组,编写一个函数来计算它们的交集。输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。 我们可以不考虑输出结果的顺序。 如果给定的数组已经排好序呢?你将如何优化你的算法? 如果nums1的大小比nums2小很多,哪种方法更优? 如果nums2的元素存储在磁盘上,内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办? 法一:用哈希表。将短的数组进行哈希,其中哈希键为数组值,哈希值为对应值出现次数。那么将长数组进行遍历,判断其中每个值是否在...

2021-09-21 10:37:18 347

原创 两个数组的交集

给定两个数组,编写一个函数来计算它们的交集法一:将两个数组各放入两个哈希里,遍历最小的数组的哈希,寻找另一个哈希里是否有一样的值。class Solution {public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {unordered_set<int> set1,set2;for(int& num :nums1){

2021-09-20 21:28:30 173

原创 移动零,c++

给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。法一:快慢指针class Solution {public: void moveZeroes(vector<int>& nums) { int i=0,j=0; for(;i<nums.size();i++){ nums[j]=nums[i]; if(nums[i]!=0){ ...

2021-09-20 12:36:17 448

原创 丢失的数,c++

给定一个包含[0, n]中n个数的数组nums,找出[0, n]这个范围内没有出现在数组中的那一个数。法一:用异或。由于[0,n]中会出现在数组中的数字会与一个下标值相等,所以可以将所有下标值和存在的数字看成一个序列,然后使用挨个异或的方法:若一个下标值没有对应相等的数字,则最后会显现出来。class Solution {public: int missingNumber(vector<int>& nums) { int res = nums.siz...

2021-09-20 12:05:10 235

原创 汇总区间,c++

给定一个无重复元素的有序整数数组 nums 。返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。列表中的每个区间范围 [a,b] 应该按如下格式输出:"a->b" ,如果 a != b"a" ,如果 a == b主要是 vector使用的问题。要多加练习啊。vector的size() to_string() resize(),初始化方式,数组形式的使用(注意v

2021-09-20 11:35:13 136

转载 wget rpm yum dpkg apt-get

wget 类似于迅雷,是一种下载工具,通过HTTP、HTTPS、FTP三个最常见的TCP/IP协议下载,并可以使用HTTP代理名字是World Wide Web”与“get”的结合。rpm,软件管理,redhat的软件格式rpm,r=redhat,p=package,m=management,用于安装 卸载 .rpm软件Yum,是一个基于RPM包管理的字符前端软件包管理器。能够从指定的服务器自动下载RPM包并且安装,可以处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。被

2021-09-19 15:04:49 485

原创 存在重复元素

法一:用java或者c++的set容器,自动去重。然后比较set和原数组长度。

2021-09-19 11:13:07 86

原创 找出出现次数大于⌊ n/2 ⌋ 的众数

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。法一:同归于尽法因为分散在数组中的众数,它出现次数永远大于其他元素出现次数之和,于是我们可以用同归于尽法,最后计数为正的就是众数。具体是,先假设第一次出现的元素是众数,然后遇到下一个判断它是不是同个元素,是的话计数+1,不是-1。一直到遇到不同元素,然后计数减为负数为止,更换众数为当前元素(这说明此前假设的众数敌不过其他人的攻击败下阵

2021-09-19 10:48:48 304

转载 Linux安装软件出现“无法获得锁”解决方法

经过试验,一共有三个文件,只要输入如下的命令rm /var/lib/dpkg/lockrm /var/lib/dpkg/lock-frontendrm /var/cache/apt/archives/lock即可解除占用

2021-09-18 15:51:56 2471 2

原创 有序数组的两数之和

给定一个已按照 非递减顺序排列的整数数组numbers ,请你从数组中找出两个数满足相加之和等于目标数target 。函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。法一:双指针。初试分别定头尾,若相加大了,则尾指针自减一,...

2021-09-18 14:42:24 143

原创 只出现一次的数字,

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?法一:异或异或的三个性质:交换律;同数异或为0.异数异或为1;一个数字与0异或为本身;class Solution { public int singleNumber(int[] nums) { int i=0;for( i=0;i<nums.length-1;i++) num

2021-09-18 14:20:43 77

原创 买卖股票的最佳时机

法一:动态规划制造一个动规数组dp。存储价格表prices为i时的最佳价格差。这第i次和历史最小值的差,和dp存储的i-1的遗留最大收益相比,谁大谁存进dp的第i个记录作为第i时的遗留最大收益。也就是,前i天的最大收益 = max{前i-1天的最大收益,第i天的价格-前i-1天中的最小价格}。class Solution { public int maxProfit(int[] prices) {int[] dp=new int[prices.length];dp[0]=0;int m

2021-09-18 12:46:38 74

原创 将有序数组转为二叉树

给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。法一:利用二叉树递归中序遍历。注意,每个递归,先处理本节点,再分别递归处理左右两节点,最后返回本节点。 public class TreeNode { int val; TreeNode left; TreeNode right; TreeN

2021-09-17 16:04:01 327

原创 有序数组合并,java

给你两个按 非递减顺序 排列的整数数组nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。法一:从前往后合并class Solut.

2021-09-17 16:01:41 312

原创 加一,java

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。法一:注意数组长度可能会变化,要处理。class Solution { public int[] plusOne(int[] digits) { int sta=0; for(int i=digits.length-1;i>=0;i--){ if(dig

2021-09-17 11:20:16 62

原创 最大子序和

给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。法一:判断法。class Solution { public int maxSubArray(int[] nums) { int i=0;int j=0; int max=nums[0];int sum=0;int sum2=0; int sta=0; i//若开头是一个或者一串内容为0或者负数的东西,选择其中最大的即可。 for(i=0;..

2021-09-17 10:57:27 95

原创 搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。法一:改造二分法class Solution { public int searchInsert(int[] nums, int target) { int n = nums.length; // 定义target在左闭右闭的区间,[low, high] int low

2021-09-16 22:23:58 91

原创 移除元素。java

题目:给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。法一:当然是快慢指针啦~class Solution { public int removeElement(int[] nums, int val) { int i=0,j=0; for(j=0;j...

2021-09-16 21:16:07 90

原创 就地删除数组重复元素

法一:快慢指针法。记得最后,要添加一个步骤,快指针j到数组最尾巴,且程序退出那个循环时,快指针j的值要对慢指针i的值赋值一次。```javaclass Solution { public int removeDuplicates(int[] nums) {int i=0,j=0;for(;j<nums.length;j++){ nums[i]=nums[j]; if(j<nums.length-1) if(nums[j+1]!=nums[j]){

2021-09-16 20:48:36 113

原创 两数相加,java

法一:暴力破解法二:当前要输入哈希map的某个kv,此kv中的数组值,先判断targer与这个数组值的差值是否在哈希map里,有就成功,没有就将新kv放入哈希map里。注意k是数组值,v是数组下标,这有利于判断任意值在数组里是否存在,因为如果给一个任意值如果哈希到一个数组下标,那不就说明存在了嘛。import java.util.*;import java.io.*;class Solution { public static int[] twoSum(int[] nums, int

2021-09-16 18:25:43 89

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除