![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
玩电脑的象
这个作者很懒,什么都没留下…
展开
-
算法学习笔记day1——java位运算
将一个int型数字转换为32bit的二进制数,因为java中的int型占4字节,32比特Long是引用类型,要比较两个Long的大小,一定要用equals而不能用==2的幂https://leetcode.cn/problems/power-of-two/二进制中1的个数https://leetcode-cn.com/problems/number-of-1-bits/ 十进制的相反数相当于对应二进制数取反加一异或运算:相同为0,不同为1。记为无进位相加。异或的性质:1、N^N=0原创 2022-06-28 14:37:21 · 166 阅读 · 0 评论 -
力扣1228——等差数列中缺失的数字(数学,等差数列,未AC)
方法1:遍历&数学——等差中项,8ms、8MB,击败83%、100%首尾元素之差除以元素数目是公差的近似值,如果相邻两元素之差的绝对值大于公差绝对值,则缺失元素为这两个元素的等差中项加绝对值是因为共公差可能为负数公差为0的特殊情况返回数组任意一个元素即可class Solution {public: int missingNumber(vector<int>& arr) { int n = arr.size() - 1, d = (arr[原创 2021-02-11 11:30:36 · 328 阅读 · 0 评论 -
剑指17——打印从1到最大的n位数(大数问题)
很简单,但这道题面试的时候要考虑大数class Solution { public int[] printNumbers(int n) { int m = 1; for(int i = n; i > 0; i--){ m *= 10; } int[] arr = new int[m-1]; for(int j = 1; j < m; j++){ arr[原创 2021-02-11 11:03:33 · 97 阅读 · 0 评论 -
剑指32 - I——从上到下打印二叉树(toArray方法强制转换,将Integer[]转换为int[]数组)
不难,但是最后强制类型转化费了不少功夫。List容器类中有一个toArray()的方法,该方法是用来把List转化为数组的。该方法有两种使用形式:toArray()与toArray(T[] t):toArray()的返回值是一个Object的数组,Object[],这个数组是不可以进行强制数据转换的。所以像这种情况就要用第二种形式来转换:toArray(T[] t)方法返回一个类T的数组,这个数组包含了类T中的所有元素。这个方法的特点是:如果数组t的长度(创建数组t的时候定义)能够装下整个L原创 2021-02-02 22:15:34 · 515 阅读 · 0 评论 -
力扣21——合并两个有序链表
一开始在头的处理中,确定了p1后,没有将l1或l2后移,导致下边尾插法中,p2.next = l1;直接使链表成环了,非常危险!/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(原创 2021-01-31 22:37:11 · 85 阅读 · 0 评论 -
力扣5——最长回文子串(DP)
服了,一道DP写一天,写出来的代码还巨烂DP思路:正序串和逆序串找最长公共子串,注意需另外判断子串是否为回文串,比如"abchkcba",这个很坑。 dp数组记录正序串在i之前,逆序串在j之前的最长公共子串长度,公共子串以 [i][j] 处的char作为结束的,所以当 chararr[i] != adverse[j] 时,最长公共子串长度直接为0。 dp时,if(chararr[i] == adverse[j]) dp[i][j] = dp[i-1][j-1] + 1;else不做处理。e..原创 2021-01-28 17:50:27 · 200 阅读 · 0 评论 -
力扣206——反转链表
AC,很简单的题,但是解决链表问题时,一定要从一般到特殊(空链表、单结点),从中间到开始(头结点)。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListN原创 2021-01-23 22:07:18 · 138 阅读 · 1 评论 -
力扣153——寻找旋转排序数组中的最小值(二分,剑指11,力扣154,代码优化)
二分查找,还挺难写的class Solution { public int findMin(int[] nums) { if(nums.length == 1) return nums[0]; int l = 0; int r = nums.length - 1; int mid; while(l < r){ mid = (l+r)/2; if(nums[原创 2021-01-22 22:33:18 · 88 阅读 · 0 评论 -
剑指11——旋转数组的最小数字(暴力)
ACclass Solution { public int minArray(int[] numbers) { if(numbers.length == 1) return numbers[0]; for(int i = 0; i < numbers.length-1; i++){ if(numbers[i] > numbers[i+1]) return numbers[i+1]; }原创 2021-01-22 21:54:09 · 47 阅读 · 0 评论 -
力扣6——Z 字形变换(队列,代码优化)
AC,当输入长度为1时需要特殊处理,处理过程比较暴力class Solution { public String convert(String s, int numRows) { if(numRows == 1) return s; Queue<Character> tmpQueue = new LinkedList(); //定义一个List,里面装着Queue,每个Queue对应一行原创 2021-01-21 14:42:42 · 141 阅读 · 0 评论 -
力扣1018——可被 5 整除的二进制前缀(动态规划、辗转相除)
这道题太妙了,第三次才AC。因为计算结果是可复用的,所以使用动态规划。一开始不知道为什么错,后来发现前缀太长的时候,计算结果会溢出。换成long也无济于事。所以使用辗转相除的思路,假设数a,商a/5不管乘以几个2,仍是a的商,所以可以置之不理。因为+1也是余数在+1。当余数a%5经过若干次变换后可被5整除时,即表示a可被5整除。class Solution { public List<Boolean> prefixesDivBy5(int[] A) {原创 2021-01-21 10:53:20 · 140 阅读 · 0 评论 -
剑指27——二叉树的镜像(递归,swap)
AC,要注意Java中只有值传递,所以调用swap函数会交换失败/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public TreeNode mirrorTre原创 2021-01-19 17:46:08 · 88 阅读 · 0 评论 -
剑指55——二叉树的深度(递归)
终于AC了,一开始用三目运算符调用四次递归,直接超时超时代码:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public int maxDepth(Tree原创 2021-01-19 15:26:15 · 49 阅读 · 0 评论 -
剑指25——合并两个排序的链表(归并)
AC/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(l1 == nu原创 2021-01-19 12:45:47 · 49 阅读 · 0 评论 -
力扣1119——删去字符串中的元音(String基本操作)
AC,String基本操作仍不熟悉s.length()要记得加括号 s.charAt(i) 是 (i) 不是 [i] String.valueOf(char[] chs) char[]转化为String,记得写String.valueOf s.substring(int begin, int end) 该子字符串从begin开始,到end-1结束class Solution { public String removeVowels(String s) { ...原创 2021-01-19 12:09:33 · 127 阅读 · 0 评论 -
剑指06——从尾到头打印链表(头插法)
AC,输入为空链表时的处理写了三次才写对,应返回长度为0的空数组。第一次0ms,与题解不同思路/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public int[] reversePrint(Lis原创 2021-01-18 23:44:26 · 74 阅读 · 0 评论 -
力扣942——增减字符串匹配(递增序列取两端)
看过题解,ACclass Solution { public int[] diStringMatch(String S) { int n = S.length(); int[] arr = new int [n+1]; int low = 0; int high = n; char index; for(int i = 0; i < n; i++){ index =原创 2021-01-18 20:04:05 · 60 阅读 · 0 评论 -
力扣1103——分糖果(暴力)
AC,好像没啥难度,也没有使用算法class Solution { public int[] distributeCandies(int candies, int num_people) { int k = 1; int[] ans = new int[num_people]; for(int i = 0; candies > 0; i++){ if(candies > k){原创 2021-01-16 11:27:11 · 50 阅读 · 0 评论 -
力扣961——重复n次的元素(HashMap)884
LeetCode961——重复n次的元素AC,参考了leetcode884class Solution { public int repeatedNTimes(int[] A) { Map<Integer, Integer> count = new HashMap(); for(int i: A){ count.put(i, count.getOrDefault(i, 0)+1); if(coun原创 2021-01-15 16:14:52 · 91 阅读 · 1 评论 -
剑指03——数组中重复的数字(快排超时)
剑指03-数组中重复的数字先是用了快排,超时。出现的问题:QuickSort函数写的不好。一是没有设置递归跳出条件,二是对左子表进行递归排序时边界没有写对class Solution { public int findRepeatNumber(int[] nums) { quickSort(nums, 0, nums.length-1); for(int i = 0; i < nums.length-1; i++){ if原创 2021-01-15 16:10:14 · 278 阅读 · 0 评论