自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode之上升下降字符串

题目: 上升下降字符串给你一个字符串 s ,请你根据下面的算法重新构造字符串:从 s 中选出 最小 的字符,将它 接在 结果字符串的后面。从 s 剩余字符中选出 最小 的字符,且该字符比上一个添加的字符大,将它 接在 结果字符串后面。重复步骤 2 ,直到你没法从 s 中选择字符。从 s 中选出 最大 的字符,将它 接在 结果字符串的后面。从 s 剩余字符中选出 最大 的字符,且该字符比上一个添加的字符小,将它 接在 结果字符串后面。重复步骤 5 ,直到你没法从 s 中选择字符。重复步骤 1

2020-11-25 23:36:22 167

原创 LeetCode之用最少数量的箭引爆气球

**题目:**在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到使得所有气球全部被引

2020-11-24 23:58:51 184

原创 LeetCode之完全二叉树的节点个数

题目: 给出一个完全二叉树,求出该树的节点个数。说明:完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。示例:方法一:迭代深度优先搜索/* * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; *

2020-11-24 23:57:58 127

原创 LeetCpde之对链表进行插入排序

题目: 插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止示例:方法一:从前往后找插入点class Solution { public ListN

2020-11-20 08:05:55 149

原创 LeetCode之移动零

题目: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序示例:说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数方法一:两次遍历class Solution { public void moveZeroes(int[] nums) { int count=0, n = nums.length,i=0; while (i < n) { if(nums[i]==0) { count++;

2020-11-19 08:31:25 222

原创 计算机科学最重要的32个算法

水一波,简单记录一下32个最重要的算法:A* 搜索算法——图形搜索算法,从给定起点到给定终点计算出路径。其中使用了一种启发式的估算,为每个节点估算通过该节点的最佳路径,并以之为各个地点排定次序。算法以得到的次序访问这些节点。因此,A*搜索算法是最佳优先搜索的范例。集束搜索(又名定向搜索,Beam Search)——最佳优先搜索算法的优化。使用启发式函数评估它检查的每个节点的能力。不过,集束搜索只能在每个深度中发现最前面的m个最符合条件的节点,m是固定数字——集束的宽度。二分查找(Binary Sea

2020-11-18 19:35:10 466

原创 人工智能之集束搜索Beam Search Algorithm

  集束搜索是属于人工智能基础知识中的知情搜索,知情搜索是基于启发法的一种搜索方法,由爬山法——>最陡爬坡法——>最佳优先搜索法——>集束搜索,逐步优化算法通过爬山简单来说下这几种知情搜索算法的区别:比如甲去爬山,其爬山过程中每到分叉点都有n—m条路径可以走,只不过其过程中可能存在下山的路径爬山法:当经过分叉点时,就会判断k条路径(k<n),其中若排除掉下山的路径,剩下的路径中,能够到达较高的路径将会被选择。在爬上法中,是没有记录任何的经过路径信息。最陡爬坡法:当经过分叉点

2020-11-18 19:20:17 799

原创 LeetCode之柠檬水找零

题目:在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。如果你能给每位顾客正确找零,返回 true ,否则返回 false示例:方法:模拟情景class Solution { public boolean lemonadeChange(int[]

2020-11-18 07:42:35 282

原创 LeetCode之距离顺序排列矩阵单元格

题目:给出 R 行 C 列的矩阵,其中的单元格的整数坐标为 (r, c),满足 0 <= r < R 且 0 <= c < C。另外,我们在该矩阵中给出了一个坐标为 (r0, c0) 的单元格。返回矩阵中的所有单元格的坐标,并按到 (r0, c0) 的距离从最小到最大的顺序排,其中,两单元格(r1, c1) 和 (r2, c2) 之间的距离是曼哈顿距离,|r1 - r2| + |c1 - c2|。(你可以按任何满足此条件的顺序返回答案。)注意:曼哈顿距离并不是所谓的两点之间的距

2020-11-17 17:03:39 288 1

原创 LeetCode之根据身高重建队列

**题目:**假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。注意:总人数少于1100人。示例:方法一:先排序在插入/** * 解题思路:先排序再插入 * 1.排序规则:按照先H高度降序,K个数升序排序 * 2.遍历排序后的数组,根据K插入到K的位置上 * * 核心思想:高个子先站好位,矮个子插入到K位置上,前面肯定有K个高个

2020-11-16 17:15:52 272

原创 LeetCode之移掉K为数字

题目:给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。注意:num 的长度小于 10002 且 ≥ k。num 不会包含任何前导零。示例:思路分析:总体思路就是在压入双向队列时,判断当前要入队的元素是否比队尾元素大,如果是,压入队尾,如果不是,移除队尾元素循环判断,直到K为0且队列不为空class Solution { public String removeKdigits(String num, int k) { Deq

2020-11-15 18:26:04 208

原创 LeetCode之数组的相对排序

题目:给你两个数组,arr1 和 arr2,arr2 中的元素各不相同arr2 中的每个元素都出现在 arr1 中对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾方法一:计数排序算法思路:这一题第一反应是自定义比较函数,然后再进行排序,但是做完之后参考^2 发现,最简单的是用计数排序,充分利用了题目所给提示信息思路也很清晰,先将arr1中的数全都记录到数组count中,然后遍历arr

2020-11-14 10:42:36 536

原创 LeetCode之奇偶链表

题目:给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数示例:说明:应当保持奇数节点和偶数节点的相对顺序。链表的第一个节点视为奇数节点,第二个节点视为偶数节点,以此类推方法一:原地实现/** * Definition for singly-linked list. * public c

2020-11-13 08:42:31 158

原创 LeetCode之按奇偶排序数组II

题目给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。你可以返回任何满足上述条件的数组作为答案。示例:提示:注意:本题是不需要什么大小顺序之分的,只注重奇数偶数之分方法一:低效率的排序整合class Solution { public int[] sortArrayByParityII(int[] A) { int[] ji=new int[A.l

2020-11-12 08:10:00 248

原创 LeetCode之自由之路

题目:示例:提示:ring 和 key 的字符串长度取值范围均为 1 至 100;两个字符串中都只有小写字符,并且均可能存在重复字符;字符串 key 一定可以由字符串 ring 旋转拼出。方法一:动态规划解题思路:class Solution { public int findRotateSteps(String ring, String key) { int n = ring.length(), m = key.length(); List

2020-11-11 22:42:17 192 2

原创 LeetCode之杨辉三角

题目:方法一:遍历class Solution { public List<Integer> getRow(int rowIndex) { List<Integer> res = new ArrayList<>(); List<Integer> pre = new ArrayList<>(); pre.add(1); pre.add(1); if (rowIndex == 0) { res.add

2020-11-10 08:47:28 110

原创 LeetCode之最接近原点的K个点

题目:我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。(这里,平面上两点之间的距离是欧几里德距离。)你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。示例:提示:方法一:排序class Solution { public int[][] kClosest(int[][] points, int K) { List<ArrayList<Integer>> list=new A

2020-11-09 17:06:31 415

原创 LeetCode周赛之字符频次唯一的最小删除次数

public class Solution { public static int minDeletions(String s) { Map<Character,Integer> map=new HashMap<>(); int n=s.length(); if(n==1)return 0; int[] word=new int[26]; map.put(s.charAt(0), 1); for(int i=1;i<n;i++) { char .

2020-11-08 21:32:48 193

原创 LeetCode之区间和的个数

**题目:**给定一个整数数组 nums,返回区间和在 [lower, upper] 之间的个数,包含 lower 和 upper。区间和 S(i, j) 表示在 nums 中,位置从 i 到 j 的元素之和,包含 i 和 j (i ≤ j)。说明:最直观的算法复杂度是 O(n2) ,请在此基础上优化你的算法示例:方法一:动态规划class Solution { public int countRangeSum(int[] nums, int lower, int upper) {

2020-11-07 23:03:38 366

原创 LeetCode之根据数字二进制下1的数目排序

题目:给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列。请你返回排序后的数组示例:方法一:暴力破解class Solution { public int[] sortByBits(int[] arr) { int n=arr.length; List<Integer> arr1=new ArrayList<Integer>(); fo

2020-11-06 23:09:13 235

原创 LeetCode之单词接龙

题目:给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回 0。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的单词。你可以假设 beginWord 和 endWord 是非空的,且二者不相同示例:方法一:标准广度遍历class Solution{

2020-11-05 10:08:09 549

原创 LeetCode之打家劫舍

题目:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例:提示:方法一:动态规划+滚动数组解题思路:class Solution { public int rob(int[] nums) { if (nums == nul

2020-11-04 19:51:27 231

原创 LeetCode之有效的山脉数组

题目:给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回 false。让我们回顾一下,如果 A 满足下述条件,那么它是一个山脉数组:A.length >= 3在 0 < i < A.length - 1 条件下,存在 i 使得:A[0] < A[1] < … A[i-1] < A[i]A[i] > A[i+1] > … > A[A.length - 1]方法一:双指针扫描(思路简单,主要是特殊情况的考虑齐全)

2020-11-03 23:42:57 192

原创 LeetCode之两个数组的交集

题目:给定两个数组,编写一个函数来计算它们的交集。示例:说明:方法一:迭代import java.util.Vector;class Solution { public int[] intersection(int[] nums1, int[] nums2) { int n1=nums1.length,n2=nums2.length; Set<Integer> set=new HashSet<>(); for(int i=0;i<n1

2020-11-02 23:10:27 378

原创 LeetCode之单词拆分II

题目:给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。说明:分隔时可以重复使用字典中的单词你可以假设字典中没有重复的单词示例:class Solution { public List<String> wordBreak(String s, List<String> wordDict) { List<String> list=n

2020-11-02 22:50:39 196

空空如也

空空如也

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

TA关注的人

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