![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
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 · 117 阅读 · 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 · 96 阅读 · 0 评论 -
141. 环形链表
https://leetcode-cn.com/problems/linked-list-cycle/[题目地址] 思路: 用Set遍历ListNode public boolean hasCycle(ListNode head) { Set<ListNode> set = new HashSet<>(); while(head != null){ if(set.contains(head)){原创 2021-11-18 22:12:03 · 212 阅读 · 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 · 107 阅读 · 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 · 429 阅读 · 0 评论 -
剑指 Offer 15. 二进制中1的个数
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。 提示: 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。 在 Java 中,编译器使用 二进制补码 记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。 示例 1: 输入:n = 11 (控制台原创 2021-11-08 21:27:58 · 74 阅读 · 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 · 73 阅读 · 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 · 68 阅读 · 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 · 148 阅读 · 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 · 94 阅读 · 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 <= 105 0 <= nums[i] <= 105 进阶: 采用的方案可以在 O(log n) 时间复杂度和 O(1) 空间复杂度中运行吗? 1.暴力 O(n) O(1原创 2021-11-07 12:18:07 · 69 阅读 · 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 · 86 阅读 · 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 · 53 阅读 · 0 评论