leetcode
欧阳渣儿
这个作者很懒,什么都没留下…
展开
-
剑指offer 121.买卖股票
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1原创 2021-11-20 21:56:18 · 91 阅读 · 0 评论 -
300. 最长递增子序列
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例 3:输入:nums = [7,7,7,7,7原创 2021-11-20 21:52:21 · 75 阅读 · 0 评论 -
141. 环形链表
https://leetcode-cn.com/problems/linked-list-cycle/[题目地址]思路:用Set遍历ListNodepublic boolean hasCycle(ListNode head) { Set<ListNode> set = new HashSet<>(); while(head != null){ if(set.contains(head)){原创 2021-11-18 22:12:03 · 188 阅读 · 0 评论 -
206链表反转
206. 反转链表给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例 1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]示例 2:输入:head = [1,2]输出:[2,1]示例 3:输入:head = []输出:[]提示:链表中节点的数目范围是 [0, 5000]-5000 <= Node.val <= 5000进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?1. 栈将原链表入栈,再原创 2021-11-17 09:40:16 · 82 阅读 · 0 评论 -
01.04. 回文排列
面试题 01.04. 回文排列给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。回文串不一定是字典当中的单词。示例1:输入:“tactcoa”输出:true(排列有"tacocat"、“atcocta”,等等)思路:set去重,如果set集合中有当前字符,就remove.如果没有就add。最后判断set.size() <= 1则是回文字符串序列。位图,字符一共128个,用两个Long就可以表示(1个l原创 2021-11-16 10:56:33 · 402 阅读 · 0 评论 -
剑指 Offer 15. 二进制中1的个数
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在 Java 中,编译器使用 二进制补码 记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。示例 1:输入:n = 11 (控制台原创 2021-11-08 21:27:58 · 69 阅读 · 0 评论 -
面试题 16.06. 最小差
给定两个整数数组a和b,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差示例:输入:{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8}输出:3,即数值对(11, 8)提示:1 <= a.length, b.length <= 100000-2147483648 <= a[i], b[i] <= 2147483647正确结果在区间 [0, 2147483647] 内思路:两个数组排序;双指针;注意超过int范原创 2021-11-08 12:08:44 · 67 阅读 · 0 评论 -
1018. 可被 5 整除的二进制前缀
给定由若干 0 和 1 组成的数组 A。我们定义 N_i:从 A[0] 到 A[i] 的第 i 个子数组被解释为一个二进制数(从最高有效位到最低有效位)。返回布尔值列表 answer,只有当 N_i 可以被 5 整除时,答案 answer[i] 为 true,否则为 false。示例 1:输入:[0,1,1]输出:[true,false,false]解释:输入数字为 0, 01, 011;也就是十进制中的 0, 1, 3 。只有第一个数可以被 5 整除,因此 answer[0] 为真。示例原创 2021-11-07 23:27:15 · 61 阅读 · 0 评论 -
1015. 可被 K 整除的最小整数
给定正整数 K,你需要找出可以被 K 整除的、仅包含数字 1 的最小正整数 N。返回 N 的长度。如果不存在这样的 N,就返回 -1。示例 1:输入:1输出:1解释:最小的答案是 N = 1,其长度为 1。示例 2:输入:2输出:-1解释:不存在可被 2 整除的正整数 N 。示例 3:输入:3输出:3解释:最小的答案是 N = 111,其长度为 3。提示:1 <= K <= 10^5 public int smallestRepunitDivByK(i原创 2021-11-07 23:21:18 · 141 阅读 · 0 评论 -
26. 删除有序数组中的重复项
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。双指针,i=0,j=1; 如果nums[i] == nums[j] , j++。如果nums[i] != nums[j] ,i++,nums[i] = nums[j],j++。这样直接把把相同的值覆盖掉,并且只操作一个数。用时很短。public int removeDuplicates.原创 2021-11-07 20:43:57 · 84 阅读 · 0 评论 -
540. 有序数组中的单一元素
给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。示例 1:输入: nums = [1,1,2,3,3,4,4,8,8]输出: 2示例 2:输入: nums = [3,3,7,7,10,11,11]输出: 10提示:1 <= nums.length <= 1050 <= nums[i] <= 105进阶: 采用的方案可以在 O(log n) 时间复杂度和 O(1) 空间复杂度中运行吗?1.暴力 O(n) O(1原创 2021-11-07 12:18:07 · 64 阅读 · 0 评论 -
面试题 05.07. 配对交换
我写的:首先把数字转换成二进制,二进制字符数组中,奇数位和偶数位进行交换,最后再转为十进制。用到的函数:Integer.toBinaryString(num); Integer.parseInt(string,2);最后:我是sb,下面是绝妙的大神代码!class Solution { public int exchangeBits(int num) { //奇数 int odd = num & 0x55555555; //0101(32位..原创 2021-11-05 21:54:10 · 80 阅读 · 0 评论 -
面试题 16.01. 交换数字
面试题 16.01. 交换数字class Solution { public int[] swapNumbers(int[] numbers) { numbers[0] = numbers[0] + numbers[1];//a = a + b; numbers[1] = numbers[0] - numbers[1];//b = a - b; 因为ab值要交换,所以,把之前的a的值赋给b,这样就完成交换了。 numbers[0] = number原创 2021-11-05 21:06:29 · 50 阅读 · 0 评论