- 博客(41)
- 收藏
- 关注
原创 前端实习突击day1
1.定义列表<dt>:definition title 列表的标题,这个标签是必须的<dd>:definition description 列表的列表项,如果不需要它,可以不加<dl> <dt>北京</dt> <dd>国家首都,政治文化中心</dd> <dd>污染很严重,PM2.0天天报表</dd> </dl> <dl> <dt>上海&
2022-02-11 23:04:00 385
原创 leetcode算法面试题汇总 day2-合并两个有序数组
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。方法:从nums1的尾部开始添加元素class S
2021-08-28 15:22:58 254
原创 leetcode算法面试题汇总 day2-搜索二维矩阵 II
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。方法一:直接遍历,效率低方法二:从右上角开始,遇到的值比目标值大则向下搜索,遇到比目标值小的值则向左搜索。代码如下class Solution { public boolean searchMatrix(int[][] matrix, int target) { int row = 0; i
2021-08-28 15:12:06 230
原创 leetcode算法面试题汇总 day1-多数元素
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。方法一:排序排序之后返回中间元素class Solution { public int majorityElement(int[] nums) { Arrays.sort(nums); return nums[nums.length/2]; }}方法二:HashMapclass So
2021-08-26 16:29:07 292
原创 leetcode算法面试题汇总 day1-只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。方法一:排序首先想到的是排序,排序之后步长为2遍历,只要与个元素作比较即可,若到达第n-2个元素还未找到,则返回最后一个元素。代码如下:class Solution { public int singleNumber(int[] nums) { Arrays.sort(nums); int i = 0; for(i = 0;i < nums
2021-08-26 16:15:37 88
原创 leetcode数据结构入门-102. 二叉树的层序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。使用队列,根节点放入队列,然后将根节点的左右节点放入队列中,根节点出队列。然后一层层的重复此操作。代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} *
2021-08-24 19:40:41 86
原创 leetcode数据结构入门-144. 二叉树的前序遍历
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。前序遍历,先遍历根节点,然后遍历左子树节点,最后遍历右子树节点。代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val =
2021-08-24 18:37:00 69
原创 leetcode数据结构入门-232. 用栈实现队列
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你只能使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和
2021-08-24 18:07:45 134
原创 leetcode数据结构入门-20. 有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。栈class Solution { public boolean isValid(String s) { Stack<Character> stack1 = new Stack<Character>(); for(int i = 0;i < s.len
2021-08-23 20:13:46 93
原创 leetcode数据结构入门-203. 移除链表元素
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。方法:递归class Solution { public ListNode removeElements(ListNode head, int val) { if(head == null){ return head; } head.next = removeElements(head.
2021-08-23 18:45:06 80
原创 leetcode数据结构入门-21. 合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。方法一:递归class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(l1 == null){ return l2; } if(l2 == null){ return l1; }
2021-08-23 17:34:33 102
原创 leetcode数据结构入门-141. 环形链表
给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。方法一:快慢指针设置两个指针,均指向头节点,快指针每次走两步,慢指针每次走一步,如果快慢指针走到了null,则没有
2021-08-22 18:18:44 89
原创 Java中数组排序及判等
Arrays.sort(array1); //数组排序Arrays.sort(array2);Arrays.equals(array1,array2); //数组判等,相等返回true,不等返回false。
2021-08-21 21:08:34 73
原创 leetcode数据结构入门-242. 有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。方法一:排序之后判等代码:class Solution { public boolean isAnagram(String s, String t) { if (s.length()!=t.length()){ return false; } char[] a
2021-08-21 21:06:19 105
原创 leetcode数据结构入门-383. 赎金信
给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。如果可以构成,返回 true ;否则返回 false。(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。杂志字符串中的每个字符只能在赎金信字符串中使用一次。)方法一:HashMap计算字符出现的频次class Solution { public boolean canConstruct(Stri
2021-08-21 20:29:34 79
原创 leetcode数据结构入门-387. 字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。方法一:HashMap时间复杂度为O(nnn);存储每个字符出现的次数,返回第一个出现次数为1的字符串,若不存在则返回-1。class Solution { public int firstUniqChar(String s) { Map<Character,Integer> map = new HashMap <Character,Integer>();
2021-08-21 16:57:20 81
原创 leetcode数据结构入门-73. 矩阵置零
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。方法一:HashSet因为只改变初始矩阵中0的行和列,而且是原地算法,所以可以创建两个HashSet,set1和set2,分别存储出现0的行和列。再遍历数组,如果数组所在的行在set1中出现或者数组所在的列在set2中出现,则将该位置置为0。有关HashSet的操作参考:HashSet操作代码如下:class Solution { public void setZeroes(i
2021-08-20 19:53:19 98
原创 leetcode数据结构入门-36. 有效的数独
请你判断一个 9x9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用 ‘.’ 表示。注意:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。方法一:遍历按照题目要求进行遍历class Solution { public b
2021-08-20 19:29:38 345
原创 leetcode数据结构入门-118. 杨辉三角
给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。方法:class Solution { public List<List<Integer>> generate(int numRows) { List<List<Integer>> res = new ArrayList<List<Integer>>(); for(
2021-08-19 18:45:03 120
原创 leetcode数据结构入门-566. 重塑矩阵
在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。方法一:逐行遍历时间复杂度为O(r∗cr*cr∗c)class
2021-08-19 18:30:17 110
原创 leetcode数据结构入门-121. 买卖股票的最佳时机
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。方法:动态规划时间复杂度为O(nnn)。创建利润数组profile[prices.length]用来存储在第i天卖出股票所获得的最大利润,并设立一个买股票的时间begin,遍历数组prices,在遇到pr
2021-08-18 22:06:52 138
原创 leetcode数据结构入门-350. 两个数组的交集 II
给定两个数组,编写一个函数来计算它们的交集。方法一:HashMap建立一个HashMap,遍历数组nums1,将数组nums1中的值依次添加到HashMap中,遇到重复的值,key.value++;然后遍历数组nums2,将nums2中的元素查找HashMap,若存在且key.value>0,则将值添加到res[]数组中,并ke.value–;代码如下:class Solution { public int[] intersect(int[] nums1, int[] nums2)
2021-08-18 21:56:29 137
原创 leetcode数据结构入门-88. 合并两个有序数组
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。方法一:从后往前插入从nums1最后一个位置插入元
2021-08-17 22:02:49 313
原创 Java中HashMap的一些常用操作
关于HashSet的操作请参考:https://editor.csdn.net/md/?articleId=119653053。执行速度比HashSet快一些。1.创建HashMapMap<Integer,Integer> map = new HashMap<Integer,Integer>();这里的第一个Integer为Key,顾名思义用于索引,只能存在一个。第二个Integer为Value,可以出现重复的值。2.添加键值对map.put(key,value);
2021-08-14 22:00:58 1309
原创 leetcode数据结构入门-1. 两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。方法一:循环,枚举首先看到题目可以马上想到的方法是双重循环,时间复杂度为O(n2n^2n2):class Solution { public int[] twoSum(int[] nums, int target) { in
2021-08-14 21:35:22 78
原创 leetcode数据结构入门-53. 最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。方法1:动态规划创建一个数组res[n],存储最后一个数为nums[n]的最大自序和。res[n] = max(res[n-1]+num[i],num[i])时间复杂度为O(nnn)具体代码:class Solution { public int maxSubArray(int[] nums) { int len = nums.length; int[]
2021-08-13 20:10:57 85
原创 Java中HashSet的一些常用操作
1.创建HashSetSet<Integer> set = new HashSet<Integer>();2.添加元素add()方法用于向Set集合中添加元素,添加成功返回true,否则返回false。set.add(n);HashSet集合不允许有重复的元素,当添加重复元素时,返回False。3.获取Hashset的大小set.size();4.添加元素remove()方法用于向Set集合中移除元素,移除成功返回true,否则返回false。set.rem
2021-08-12 20:34:05 1021
原创 leetcode数据结构入门-217. 存在重复元素
给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。首先想到的解法是最简单的循环,这样做的时间复杂度是O(n2n^2n2),但事实最容易想到的方法:class Solution { public boolean containsDuplicate(int[] nums) { for(int i = 0;i < nums.length-1;i++){ for
2021-08-12 20:11:37 147
原创 删除重复的数
class Solution {public:int removeDuplicates(vector& nums) {if(nums.empty()){return 0;}int index = nums.size();int sum=1;int t=1;for(int i=0;i<index-1;i++){if(nums[i+1]==nums[i]){continue;}else{nums[t] = nums[i+1];t++;sum++;}}retur
2021-04-13 00:11:54 53
原创 回文数 + 整数反转
class Solution {public: bool isPalindrome(int x) { if(x<0){ return false; } int length=0,y=x,half; int word[20]; int i = 0,j; while(y/10!=0){ word[length] = y%10; l
2021-04-03 22:18:16 74
原创 2021-04-02
机器人运动轨迹回溯法 DFSclass Solution {public: int movingCount(int m, int n, int k) { vector<vector<bool>> visited(m, vector<bool>(n, 0)); return dfs(0, 0, 0, 0, visited, m, n, k); }private: int dfs(int i, int j, in
2021-04-02 20:19:25 54
原创 矩阵中的路径 回溯法 (dfs+剪枝)额外数组
class Solution {public: bool exist(vector<vector<char>>& board, string word) { int i,j; memset(flag,0,sizeof(flag)); rows = board.size(); lines = board[0].size(); for(i=0;i<rows;i++){
2021-03-26 11:24:04 67
原创 斐波拉契数列解法
斐波那契数列的定义是 f(n + 1) = f(n) + f(n - 1)f(n+1)=f(n)+f(n−1) ,生成第 nn 项的做法有以下几种:递归法:原理: 把 f(n)f(n) 问题的计算拆分成 f(n-1)f(n−1) 和 f(n-2)f(n−2) 两个子问题的计算,并递归,以 f(0)f(0) 和 f(1)f(1) 为终止条件。缺点: 大量重复的递归计算,例如 f(n)f(n) 和 f(n - 1)f(n−1) 两者向下递归需要 各自计算 f(n - 2)f(n−2) 的值。记忆化递归法
2021-03-22 20:36:37 257
原创 快速排序算法,c语言的实现
快速排序节省时间,提高效率。#include<stdio.h>int qusort(int arr[],int start,int en){ //递归 start 头 en尾 int i,j,temp; i=start; //两个光标,分别指向头和尾 j=en; temp=arr[...
2020-02-27 11:17:08 197
原创 c语言中素数判断的两种方法
什么是素数?首先1不是素数,素数是指正能被1和它本身整除的正整数。判断素数的两种方法假设这个数为n第一种:将其与2~(n-1)的所有数取余若不存在余数为0,则为素数int p=1; //p为标识for(int i=2;i<n;i++) { if(n%i==0){ p=0; break; } }第二种(优化算法,大大节...
2020-01-02 17:57:57 1944
转载 ACM中------int64与long long、long的区别
首先来看一看int、long、long long的取值范围int 所占字节数为:4 表示范围为:-2147483648~2147483647short int 所占字节数为:2 表示范围为:-32768~+32767long 所占字节数为:4 表示范围为:-...
2020-01-02 12:44:48 235
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人