![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
刷题
想吃榨菜肉丝呀
这个作者很懒,什么都没留下…
展开
-
[easy]赎金信
给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。如果可以构成,返回 true ;否则返回 false。(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。杂志字符串中的每个字符只能在赎金信字符串中使用一次。)分别求magazine和ransom中字母出现的频率若ransom中某个字母出现的频率比magazine中对应字母出现的频率大,则返回false原创 2021-11-10 21:15:23 · 63 阅读 · 0 评论 -
[easy]字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。在第一次遍历时,我们使用哈希映射统计出字符串中每个字符出现的次数。在第二次遍历时,我们只要遍历到了一个只出现一次的字符,那么就返回它的索引,否则在遍历结束后返回 -1。class Solution { public int firstUniqChar(String s) { Map<Character,Integer> fre = new HashMap<Character,原创 2021-11-09 23:04:49 · 57 阅读 · 0 评论 -
[easy]重塑矩阵
在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。mat拉直赋值给新数组class Solution {原创 2021-11-08 23:36:26 · 59 阅读 · 0 评论 -
[medium]无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。提交1 解答错误不满足s = “pwwkew” ,return 3;class Solution { publ原创 2021-10-28 22:28:10 · 56 阅读 · 0 评论 -
[easy]买卖股票最佳时间
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。1.暴力解法——超时class Solution { public int maxProfit(int[] prices) { int ans = 0;原创 2021-10-27 23:42:35 · 38 阅读 · 0 评论 -
[easy]求两个函数交集
给定两个数组,编写一个函数来计算它们的交集输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]分别对两个数组排序建新数组,长度为min(nums1.length,nums2.length)。将所求元素放在新数组中(双指针),求交集长度复制有效数组并返回class Solution { public int[] intersect(int[] nums1, int[] nums2) { int len1 = nums1.length原创 2021-10-27 23:12:27 · 385 阅读 · 0 评论 -
[easy]合并有序数组
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]解释:需要合并 [1,2,3] 和 [2,5,6] 。合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums原创 2021-10-27 23:05:05 · 37 阅读 · 0 评论 -
[easy]最大子序列和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和1.动态规划class Solution { public int maxSubArray(int[] nums) { int pre = 0; int ans = nums[0]; for(int i=0;i<nums.length;i++){ pre = Math.max(nums[i],pre+nums[i]);原创 2021-10-27 23:00:59 · 46 阅读 · 0 评论 -
[medium]删除链表的倒数第 N 个结点
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?在对链表进行操作时,一种常用的技巧是添加一个哑节点(dummy node),它的 next 指针指向链表的头节点。这样一来,我们就不需要对头节点进行特殊的判断了。例如,在本题中,如果我们要删除节点 y,我们需要知道节点 y 的前驱节点 xx,并将 x 的指针指向 y 的后继节点。但由于头节点不存在前驱节点,因此我们需要在删除头节点时进行特殊判断。但如果我们添加了哑节点,那么头节点的前驱节点就是哑节点本原创 2021-10-25 23:53:13 · 57 阅读 · 0 评论 -
[easy]爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。暴力递归——果然超时class Solution { public int climbStairs(int n) { if(n==1){ return 1; } if(n==2){ return 2; } return c原创 2021-10-25 12:35:47 · 43 阅读 · 0 评论 -
[easy]链表的中间结点
给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。经典快慢指针/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int va原创 2021-10-25 12:19:36 · 44 阅读 · 0 评论 -
[easy]反转字符串中的单词 III
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例:输入:“Let’s take LeetCode contest”输出:“s’teL ekat edoCteeL tsetnoc”提示:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。救命!没有比我这解法更恶心了吧class Solution { public String reverseWords(String s) { String[] str_arr = s.s原创 2021-10-19 23:16:42 · 56 阅读 · 0 评论 -
[easy]反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。双指针指头尾,交换顺序class Solution { public void reverseString(char[] s) { int left=0;int right = s.length-1; while(left<right){ char temp =原创 2021-10-17 23:32:40 · 93 阅读 · 0 评论 -
[easy]两数之和
给定一个已按照 非递减顺序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。你可以假设每个输入 只对应唯一的答案 ,而且你不可以重复使用相同的元素。输入:numbers = [2,7,11,15], target =原创 2021-10-17 20:43:55 · 40 阅读 · 0 评论 -
[easy]移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:1.必须在原数组上操作,不能拷贝额外的数组。2.尽量减少操作次数。双指针i,j遍历1:用j记录一共有多少非零元素;遍历2:从第j个元素后,均为0class Solution { public void moveZeroes(int[] nums) { int j=0; for(原创 2021-10-17 20:37:12 · 31 阅读 · 0 评论 -
[medium]旋转数组
给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]new新数组将原数组分原创 2021-10-13 23:57:13 · 34 阅读 · 0 评论 -
[easy]第一个错误的版本
你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, …, n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。输入:n = 5, bad = 4输原创 2021-10-12 23:51:23 · 38 阅读 · 0 评论 -
[easy] 回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。转为字符串,利用charAt函数逐次比较class Solution { public boolean isPalindrome(int x) { if(x<0) return false; else{ String原创 2021-10-12 23:07:29 · 77 阅读 · 0 评论 -
[easy]整数反转
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。循环除以10取余判断溢出 public static int reverse(int x) { int ans = 0; while(x!=0) { int digit = x%10; x = x/10; ans = 10*ans+digit; if(ans>Intege原创 2021-10-12 22:51:02 · 35 阅读 · 0 评论