- 博客(73)
- 收藏
- 关注
原创 leetcode 3. 无重复字符的最长子串
一个map,存放字符和下标。如果找到了相同的,那么向右移动left=max(left, 已存在的位置+1) ,如果没找到,则存放新的值,max+1,更新max=(max, i-left+1)滑动窗口思路,定义left和max。至多包含两个不同字符的最长子串。无重复字符的最长子串。
2024-05-19 13:45:21 182
原创 C++学习
指针void*/int*……:指针本质就是一个地址,是一个整数。如:0x7ffc4d22a9d4&:取地址 / * :解引用引用&放在数据类型后代表是引用 int&&放在变量前代表是取地址 &y
2022-07-07 15:22:56 198 1
原创 安卓四大组件-Activity
四大组件-Activity:是一个页面并且可以响应进行交互。。例如:打电话页面相关API:一般的启动Activity:startActivity(Intent intent)结束当前的Activity:finish()获得启动的Activity的Intent :getIntent()Intent(意图):是Activity、services和broadcastReceiver的信使。【携带数据】显示Intent:明确指定的目标组件的Intent创建对象:Intent(Context c
2021-03-05 20:13:35 235 1
原创 26. 删除排序数组中的重复项
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。双指针!!!class Solution { public int removeDuplicates(int[] n.
2020-08-11 15:40:07 194
原创 136. 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 11.任何数和 0做异或运算,结果为本身2.任何数和其自身做异或运算,结果是 03.异或运算满足交换律和结合律class Solution {//因为其它数字均出现2次,所以异或运算一定为0了,然后出现1次的那个数^0=本身,所以最后输出的数就是出现一次的数了。 pu.
2020-08-11 13:47:01 117
原创 34. 在排序数组中查找元素的第一个和最后一个位置
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: [-1,-1]class Solution { public int[] s.
2020-08-11 13:14:18 230
原创 93. 复原IP地址
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 ‘.’ 分隔。示例:输入: “25525511135”输出: [“255.255.11.135”, “255.255.111.35”]解题思路:回溯法+剪枝class Solution {//255.255.110.113//一共四段,,,每段有3个数字,并且数字要小于255,,,回溯法 List<String>.
2020-08-09 15:50:05 130
原创 240. 搜索二维矩阵 II
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定 target = 5,返回 true。给定 target = 20.
2020-08-04 19:51:49 117
原创 365. 水壶问题
有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水?如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。你允许:装满任意一个水壶清空任意一个水壶从一个水壶向另外一个水壶倒水,直到装满或者倒空示例 1: (From the famous “Die Hard” example)输入: x = 3, y = 5, z = 4输出: True示例 2:输入: x = 2, y = 6, z = 5输出: False.
2020-08-04 19:50:56 120
原创 110. 平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7]3/ 9 20/ 15 7返回 true 。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * .
2020-08-04 16:09:46 125
原创 108. 将有序数组转换为二叉搜索树
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:0/ -3 9/ /-10 5/** * Definition for a binary tree node. * public class TreeNode { * .
2020-08-04 15:43:46 100
原创 674. 最长连续递增序列
给定一个未经排序的整数数组,找到最长且连续的的递增序列,并返回该序列的长度。示例 1:输入: [1,3,5,4,7]输出: 3解释: 最长连续递增序列是 [1,3,5], 长度为3。尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为5和7在原数组里被4隔开。示例 2:输入: [2,2,2,2,2]输出: 1解释: 最长连续递增序列是 [2], 长度为1。class Solution { public int findLengthOfLCIS(int[] num.
2020-08-04 15:28:58 111
原创 剑指 Offer 65. 不用加减乘除做加法
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。class Solution { public int add(int a, int b) { //a+b = (a^b) + (a&b)<<1; while(b!=0){ int sum = a^b; b = (a&b)<<1; a = sum; .
2020-07-29 16:52:54 118
原创 剑指 Offer 64. 求1+2+…+n
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。class Solution { public int sumNums(int n) { int sum = n; boolean flag= (n>0) && ((sum +=sumNums(n-1))>0); return sum; }}...
2020-07-29 16:45:12 100
原创 剑指 Offer 63. 股票的最大利润
假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。买卖一次股票class Solution { public int maxProfit(int[] prices) { if(pri.
2020-07-29 16:30:45 117
原创 剑指 Offer 62. 圆圈中最后剩下的数字
0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。示例 1:输入: n = 5, m = 3输出: 3示例 2:约瑟夫环的问题最后一次一定是剩了2个人,那么我们可以反推class Solution { public int lastRemaining(int n, int.
2020-07-29 16:23:08 125
原创 面试题 01.06. 字符串压缩
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。输入:“aabcccccaaa”输出:“a2b1c5a3”输入:“a“输出:”a“----不能输出”a1“class Solution { public String compressString(String S) { if(S.leng.
2020-07-20 22:52:17 133
原创 阿里笔试
//评测题目: 无二叉搜索树中的两个节点被错误地交换。// 请在不改变其结构的情况下,恢复这棵树。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * .
2020-07-15 19:54:07 357
原创 344. 反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。class Solution { public void reverseString(char[] s) { int left = 0,right = s.length-1; while(left<ri.
2020-07-15 14:41:59 120
原创 200. 岛屿数量
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:[[‘1’,‘1’,‘1’,‘1’,‘0’],[‘1’,‘1’,‘0’,‘1’,‘0’],[‘1’,‘1’,‘0’,‘0’,‘0’],[‘0’,‘0’,‘0’,‘0’,‘0’]]输出: 1DFS沉岛思想~class Solution { int coun.
2020-07-14 21:31:50 124
原创 剑指 Offer 37. 序列化二叉树
请实现两个函数,分别用来序列化和反序列化二叉树。序列化:将树转成字符串反序列化:将字符串转成树/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Codec { // .
2020-07-14 17:11:21 110
原创 20. 有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true二刷:有效的括号!!长度一定是偶数!!!单数的话一定不是有效的括号class Solution { public boolean isValid(String s) { if(s.length()%2!=0) ret.
2020-07-14 15:45:06 76
原创 53. 最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。最大连续和class Solution { public int maxSubArray(int[] nums) { int b = nums[0]; int sum = b; for(int i=1;i&.
2020-07-14 15:16:50 72
原创 4. 寻找两个正序数组的中位数
给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2 + 3)/2 = 2.5借鉴大佬得思想,感觉不是很懂:class Solution { pu.
2020-07-14 14:26:30 155
原创 2. 两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807逆序存储得,意思就是说无论前边是否是一样得,而因为是逆序计算,最后.
2020-07-13 23:01:34 76
原创 3. 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。第二次刷,每次刷都有不同得体会这道题采用map,key存放得是字符,value存放得是“下标得位置”。。如果出现相同得了,我就把start变为最大得下标值~class Solution { public int lengthOfLongestSubstring(String s) { Map.
2020-07-13 21:57:05 87
原创 1. 两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]暴力法两个for循环就不写了~采用hashmap来写,key存放nums[i],value存放index这道题是要找到下标,如果是找.
2020-07-13 21:38:40 130
原创 234. 回文链表
刷题经验:链表的话,可以与栈联系起来~请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true解题思路:前序和倒叙相同的话就是回文了~倒叙首先想到的是栈,我全部入栈,然后再出战,出战的时候和链表的值.val一一对比。如果不相同就返回false,如果全部遍历完了,就为true一个bug困扰了半个小时,我没有写.val,直接去比较了值是否相等了,就是觉得自己的思路没有问题,但就是不对,所来放到
2020-07-12 17:02:43 88
原创 160. 相交链表
编写一个程序,找到两个单链表相交的起始节点。解题思路:因为两个链表。它们的长度可能是不一样的,所以我们需要让长的那个链表先走到短的那个起点上,然后再一起去走,找到相交的点。。所以就要分别计算两个链表的长度了!/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val =.
2020-07-12 15:00:38 92
原创 字节面试题-leetcode
给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。示例 1:输入: [1,2,1]输出: [2,-1,2]解释: 第一个 1 的下一个更大的数是 2;数字 2 找不到下一个更大的数;第二个 1 的下一个最大的数需要循环搜索,结果也是 2。解题思路:给定一个数组,找到比它大的第一个数!!!而且也是循环.
2020-07-12 14:48:58 431
原创 字节面试题
给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。请返回 nums 的动态和。示例 1:输入:nums = [1,2,3,4]输出:[1,3,6,10]解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。//动态规划class Solution { public int[] runningSum(int[] nums) { int[] dp = new int[n.
2020-07-12 14:44:41 249
原创 128. 最长连续序列
给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。示例:输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。解题思路:第一想法是排序!然后有一个问题,就是如果数字有重复的话,0,1,1,2.。所以要去重,这里想的就是set。然后去重完之后再转为array;继续让后一个-前一个值==1的话,就+1;然后不断地更新max地值package 左神.leetcode;import ja.
2020-07-11 15:13:51 97
原创 176. 第二高的薪水
编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。±—±-------+| Id | Salary |±—±-------+| 1 | 100 || 2 | 200 || 3 | 300 |±—±-------+例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。//sql语句select ifnull((select distince Salar.
2020-07-10 21:39:55 190
原创 300. 最长上升子序列
给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。class Solution { public int lengthOfLIS(int[] nums) { if(nums.length==0) return 0; int[] dp = new int[nums.length]; Arrays.fill.
2020-07-10 21:08:25 76
原创 79. 单词搜索
单词搜索给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[[‘A’,‘B’,‘C’,‘E’],[‘S’,‘F’,‘C’,‘S’],[‘A’,‘D’,‘E’,‘E’]]给定 word = “ABCCED”, 返回 true给定 word = “SEE”, 返回 true给定 word = “ABCB”, 返回 fa..
2020-07-10 21:02:05 120
原创 143. 重排链表
给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.**解题思路:把所有的Node都入栈,然后再依次出栈,插入.
2020-07-10 19:47:59 132
原创 19. 删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.**解题思路:链表的删除!1.一定要定义一个dummyHead虚拟头节点,!!2.定义一个prev前向指针!!!ListNode dummyHead = new ListNode(0);dummyHead.next = head;ListNode prev.
2020-07-09 18:48:45 151
原创 523. 连续的子数组和
给定一个包含 非负数 的数组和一个目标 整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,且总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数。示例 1:输入:[23,2,4,6,7], k = 6输出:True解释:[2,4] 是一个大小为 2 的子数组,并且和为 6。示例 2:输入:[23,2,6,4,7], k = 6输出:True解释:[23,2,6,4,7]是大小为 5 的子数组,并且和为 42。class Solution { pu.
2020-07-08 18:57:23 136
原创 1114. 按序打印--阿里巴巴面试题
我们提供了一个类:public class Foo {public void one() { print(“one”); }public void two() { print(“two”); }public void three() { print(“three”); }}三个不同的线程将会共用一个 Foo 实例。线程 A 将会调用 one() 方法线程 B 将会调用 two() 方法线程 C 将会调用 three() 方法请设计修改程序,以确保 two() 方法在 one() 方法之.
2020-07-06 21:54:02 129
原创 705. 设计哈希集合----阿里巴巴面试题
不使用任何内建的哈希表库设计一个哈希集合具体地说,你的设计应该包含以下的功能add(value):向哈希集合中插入一个值。contains(value) :返回哈希集合中是否存在这个值。remove(value):将给定值从哈希集合中删除。如果哈希集合中没有这个值,什么也不做。借鉴一个大佬的代码!!!真是简便,????,采用数组来实现class MyHashSet { private boolean[] flag; /** Initialize your data struc
2020-07-06 21:32:58 109
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人