自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 203. 移除链表元素

class Solution { public ListNode removeElements(ListNode head, int val) { ListNode node = new ListNode(0);//新建一个空节点,防止头结点被删除 node.next = head; ListNode temp = node;//创建当前节点 while(temp.next!=null){ if(temp....

2021-12-14 21:40:50 209

原创 636. 函数的独占时间

class Solution { public int[] exclusiveTime(int n, List<String> logs) { int[] ans = new int[n]; Stack<Integer> stack = new Stack<Integer>();//栈顶代表当前在执行的任务 String[] s = logs.get(0).split(":"); int i =...

2021-12-14 16:14:50 222

原创 224. 基本计算器

class Solution { public int calculate(String s) { Stack<Integer> stack = new Stack<Integer>();//用来存储符号 stack.push(1); int flag = 1; int i = 0; int ans = 0; while(i<s.length()){//相当于把括...

2021-12-14 14:50:12 110

原创 227. 基本计算器 II

class Solution { public int calculate(String s) { Stack<Integer> stack = new Stack<Integer>();//例如 3 + 5 / 2 + 4 * 3 int l = s.length(); int num = 0; char flag = '+';//记录符号 for(int i=0;i<l;i++){...

2021-12-13 21:47:46 195

原创 71. 简化路径

class Solution { public String simplifyPath(String path) { Stack<String> s = new Stack<String>(); String[] str = path.split("/");//根据斜杠划分,不确定字符串数组长度,不能分成两行代码 for(int i=0;i<str.length;i++){ if(str...

2021-12-13 16:21:14 147

原创 372. 超级次方

class Solution { public int superPow(int a, int[] b) { int ans = 1; for(int i=b.length-1;i>=0;i--){ ans = (int)((long)ans * pow(a,b[i])%1337); a = pow(a,10); } return ans; } publi...

2021-12-12 21:19:44 298

原创 400. 第 N 位数字

1、一个一个加,超时class Solution { public int findNthDigit(int n) { int count = 9; int num = 1; while(n > (long) num * count){//几位数 n -= num * count; num++; count *= 10; } ...

2021-12-10 11:12:11 139

原创 670. 最大交换

将数字转换成字符数组类型,然后进行排序,与原数组进行比较,第一个不相符的位置即为两个需要交换的数字,然后从右往左找class Solution { public int maximumSwap(int num) { char[] str = Integer.toString(num).toCharArray(); char[] flag = Integer.toString(num).toCharArray(); int l = str.lengt..

2021-12-02 09:53:53 56

原创 405. 数字转换为十六进制数

数字转换为十六进制 ,其实就是二进制的每四位转换成以为十六进制。补码:反码+1class Solution { public String toHex(int num) { if(num==0) return "0"; String hex = "0123456789abcdef"; StringBuffer ans = new StringBuffer(); while(num!=0 && (ans.le..

2021-11-29 21:16:46 697

原创 319. 灯泡开关

用模拟---超时脑筋急转弯:计算每个数字的因子数量,数字的因子数量为双数--关数字的因子数量为单数--开除了可以开方的数字,其余数字的因子数均为双数所以转换为计算开方数字的数量class Solution { public int bulbSwitch(int n) { int count = 0; for(int i=1;i<=Math.sqrt(n);i++){ count++; } ...

2021-11-23 20:15:50 57

原创 477. 汉明距离总和

如果一个一个计算汉明距离的话,超时可以同时对相同位置的二进制数进行比较,每位的距离是1的个数×0的个数class Solution { public int totalHammingDistance(int[] nums) { int count = 0; for(int i=0;i<32;i++){ int one = 0; for(int j=0;j<nums.length;j++){ ..

2021-11-12 10:32:02 167

原创 190. 颠倒二进制位

位运算:<<左移,相当于*2;>>右移,相当于/2public class Solution { // you need treat n as an unsigned value public int reverseBits(int n) { int ans = 0; for (int i = 0; i < 32; i++) { ans = (ans<<1) + (n&1);...

2021-11-11 17:41:50 157

原创 5. 最长回文子串

中心拓展算法class Solution { int begin = 0,end = 0;//全局变量 public String longestPalindrome(String s) { int n = s.length(); for(int i=0;i<n;i++){ findPalindrome(s,i,i);//奇数长度回文串 findPalindrome(s,i,i+1);//偶数长...

2021-11-09 21:36:03 48

原创 6. Z 字形变换

虽然题目说是Z字形,但是并不需要将样式输出,无所谓其所在位置,只需要知道在哪一行,每行的相对位置就行。设置StringBuilder数组,每个数组存储一行,定义时需要先定义数组,再定义每行。class Solution { public String convert(String s, int numRows) { StringBuilder[] stringBuilders = new StringBuilder[numRows]; for(int i..

2021-11-04 20:34:28 48

原创 43. 字符串相乘

评论区截图:最后再去掉前导零class Solution { public String multiply(String num1, String num2) { int[] sum = new int[num1.length() + num2.length() - 1]; for(int i=0;i<num1.length();i++){ for(int j=0;j<num2.length();j++){ ...

2021-11-02 16:50:48 50

原创 522. 最长特殊序列 II

1、重点是独有的最长子序列,如果字符串中只有两个字符串,那么分两种情况1)两个字符串长度不相等,那么长的那个字符串为最长子序列;2)两个字符串长度相等,那么a=b则不存在唯一,返回-1,a!=b,两者都为最长子序列。首先想到将所有字符串进行统计,建立map进行计数,将重复出现的字符串删除,那么最长的字符串即为答案,但是存在字符串为已删除字符串的子序列,那么这个字符串其实也应该删去。所以需要将重复的字符串进行统计,判断不重复的字符串是否为重复字符串的子序列,删去子序列后最长的字符串即为答案。..

2021-11-01 20:50:25 1828

原创 481. 神奇字符串

1、前三位数字比较容易得出,可以直接写出来,方便后续的推算2、使用双指针,一个用来指示当前字符串末位,另一个来指示相同字符个数3、还需要进行1和2的切换,每次前一个指针移动一位,则1和2需要切换一次class Solution { public int magicalString(int n) { if(n<=3)return 1; String s = "1"; int i = 2; int num = 1;...

2021-10-30 20:40:40 59

原创 8. 字符串转换整数 (atoi)

class Solution { public int myAtoi(String s) { StringBuilder stringBuilder = new StringBuilder(); int n = 0; boolean flag = false; if(s.length()==0)return 0;//如果字符串为空串 while(n<s.length()&&s.ch...

2021-10-28 10:58:02 63

原创 393. UTF-8 编码验证

注意:题目中说的是每个字节的长度,并不是字节的个数class Solution { public boolean validUtf8(int[] data) { int n = data.length; int count = 0; for (int i = 0; i < n; i++) { String s = Integer.toBinaryString(data[i]);//将十进制转换为二进制 ...

2021-10-27 16:55:46 52

原创 443. 压缩字符串

题目不仅需要返回数组长度,还需要返回改变后的数组,如果增加一个新数组会超过内存限制。需要用到双指针,两个用来指示相同字母的个数,还有一个来指示当前已改变数组的长度。class Solution { public int compress(char[] chars) { int left = 0; int count = 0; int n = chars.length; for(int i=0;i<n;i++){ ..

2021-10-26 20:22:37 42

原创 696. 计数二进制子串

方法一:遍历所有子串(超时)方法二:统计所有连续字符的数量class Solution { public int countBinarySubstrings(String s) { List<Integer> list = new ArrayList<Integer>(); int left = 0; int sum = 0; int right = s.length(); whil..

2021-10-22 16:52:54 33

原创 451. 根据字符出现频率排序

class Solution { public String frequencySort(String s) { char[] str = s.toCharArray(); Map<Character,Integer> map = new HashMap<Character,Integer>(); List<Character> list = new ArrayList<Character>();/...

2021-10-19 21:28:12 29

原创 49. 字母异位词分组

class Solution { public List<List<String>> groupAnagrams(String[] strs) { Map<String,List<String>> map = new HashMap<String,List<String>>(); for(String s:strs){ char[] str = s.toCharArr...

2021-10-19 16:05:34 34

原创 389. 找不同

异或:1、一个数跟其本身异或为0 2、 任何数与0异或不变 3、异或满足交换律class Solution { public char findTheDifference(String s, String t) { char[] str = s.toCharArray(); char[] ttr = t.toCharArray(); int n = 0; for(int i=0;...

2021-10-18 21:23:52 48

原创 387. 字符串中的第一个唯一字符

class Solution { public int firstUniqChar(String s) { Map<Character,Integer> map = new HashMap<Character, Integer>(); char[] str = s.toCharArray(); for(int i=0;i<str.length;i++){ map.put(str[i],map....

2021-10-18 14:06:01 28

原创 151. 翻转字符串里的单词

class Solution { public String reverseWords(String s) { String[] ss = s.split(" "); List<String> a = new ArrayList<String>(); for(int i=0;i<ss.length;i++){ if(ss[i].equals(""))//是"",不是" " ...

2021-10-18 10:42:08 32

原创 14. 最长公共前缀

方法一:class Solution { public String longestCommonPrefix(String[] strs) { String min = strs[0]; for(int i=1;i<strs.length;i++){ String ans = ""; for(int j=0;j<Math.min(min.length(),strs[i].length());j+...

2021-10-15 20:43:15 23

原创 304. 二维区域和检索 - 矩阵不可变

class NumMatrix { private int[][] sum; private int m=0; private int n=0; public NumMatrix(int[][] matrix) { m = matrix.length; n = matrix[0].length; sum = new int[m+1][n+1]; for(int i=0;i<m;i++){...

2021-09-29 13:36:15 31

原创 289. 生命游戏

方法一:复制一个新的二维数组方法二:不需要额外空间,在原数组上直接操作,分为四种情况(对应题目中四种) 1、board[i][j]=1->board[i][j] = -1(表示本来活着,后来死了,设置成-1是为了计算其他格子的时候,它的状态应该是活的,加绝对值即可) 2、board[i][j]=1不变 3、board[i][j]=1->board[i][j] = -1(表示本来活着,后来死了,设置成-1是为了计算其他格子的时候,它...

2021-09-28 21:41:26 101

原创 48. 旋转图像

方法一:一层一层旋转class Solution { public void rotate(int[][] matrix) { int n = matrix.length; for(int i=0;i<n/2;i++){ for(int j=i;j<n-1-i;j++){ int temp = matrix[i][j]; matrix[i][j] = m...

2021-09-28 15:07:17 31

原创 498. 对角线遍历

分为两种情况1、上行,即横坐标+纵坐标为偶数,分为三种情况: 1)到达3、9的位置,即右边界,纵坐标 = m-1,那么下一步就是向下走,即横坐标+1,纵坐标不变 2)到达1的位置,即上界线,表示为横坐标 = 0,纵坐标<m-1,那么下一步就是向右走,即横坐标不变,纵坐标+1 3)到达5、7的位置,未碰到界线,表示为横坐标>0,纵坐标<m-1,那么下一步就是向右上方走,即横坐标-1,纵坐标+1注:三种情况不能换位子,如果同时...

2021-09-28 10:26:04 79

原创 54. 螺旋矩阵

设定上下左右四条边界,分成四种路径:1、向右移动,直到左边界,遍历上边界,上边界+12、向下移动,直到下边界,遍历右边界,右边界-13、向左移动,直到左边界,遍历下边界,下边界-14、向上移动,直到上边界,遍历左边界,左边界+1由于长宽不一定相等,所以左右移动时也需要保证上边界小于等于下边界,同样上下移动时,也要保证左边界小于等于右边界。List<Integer>list = new ArrayList<Integer>(); int m..

2021-09-26 20:26:28 24

原创 396. 旋转函数

解法一:暴力 超时解法二:根据规律class Solution { public int maxRotateFunction(int[] nums) { int len = nums.length; int sum = 0; int max = 0; int temp = 0; for(int i=0;i<len;i++){ sum = sum + nums[i]; ..

2021-09-24 20:58:32 71

原创 189. 旋转数组

方法一(超时):class Solution { public void rotate(int[] nums, int k) { int l = nums.length; k = k % l; for(int i=0;i<k;i++){ int temp = nums[l-1]; for(int j=l-1;j>0;j--){ nums[j] = nu..

2021-09-24 19:28:53 30

原创 118. 杨辉三角

方法1:创建一个数组用来存储数据,然后赋值给listclass Solution { public List<List<Integer>> generate(int numRows) { List<List<Integer>> list = new ArrayList<>(); int [][] ilist= new int[numRows][numRows]; for(int i...

2021-09-23 12:36:19 38

原创 665. 非递减数列

nums[i]>nums[i+1]有两种情况:1、 nums[i]=nums[i+1],将前一个数字缩小,但这种情况还需要考虑nums[i]和nums[i-1]之间的大小关系,如果是递减的,那么不成立。2、nums[i+1]=nums[i],将后一个数字扩大,这种情况无需考虑其他的大小。class Solution { public boolean checkPossibility(int[] nums) { int [] nums1 = new int[nu..

2021-09-18 21:36:49 39

原创 453. 最小操作次数使数组元素相等

class Solution { public int minMoves(int[] nums) { Arrays.sort(nums); int x = nums[0]; int sum = 0; for(int i=1;i<nums.length;i++){ sum += nums[i]-x; } return sum; }}每次操作会使n-1个...

2021-09-18 20:24:52 65

原创 41. 缺失的第一个正数

class Solution { public int firstMissingPositive(int[] nums) { int n = nums.length; int[] flag = new int[n+1]; for(int i=0;i<n;i++){ if(nums[i]>0&&nums[i]<=n){ flag[nums[i]] = 1; ...

2021-09-17 20:24:40 27

原创 448. 找到所有数组中消失的数字

给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。示例 1:输入:nums = [4,3,2,7,8,2,3,1]输出:[5,6]示例 2:输入:nums = [1,1]输出:[2]提示:n == nums.length1 <= n <= 1051 <= nums[i] <= n进阶:你能在不使用额外空间且时间复.

2021-09-16 20:30:50 35

原创 414. 第三大的数

给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。示例 1:输入:[3, 2, 1]输出:1解释:第三大的数是 1 。示例 2:输入:[1, 2]输出:2解释:第三大的数不存在, 所以返回最大的数 2 。示例 3:输入:[2, 2, 3, 1]输出:1解释:注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。此例中存在两个值为 2 的数,它们都排第二。在所有不同数字中排第三大的数为 1 。提示:1 <= nums..

2021-09-15 12:34:24 28

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除