LeetCode100题
LeetCode100
两数之和
遍历数组,以哈希表存数与下标,边存边查,速找和为目标值的两数下标
class Solution {public int[] twoSum(int[] nums, int target) {int[] ans=new int[2];HashMap<Integer,Integer> map=new HashMap<>();for(int i=0;i<nums.length;i++){if(map.containsKey(target-nums[i])){ans[0]=map.get(target-nums[i]);ans[1]=i;return ans;}map.put(nums[i],i);}return ans;}
}
字母异位词分组
class Solution {public List<List<String>> groupAnagrams(String[] strs) {List<List<String>> ret=new ArrayList<>();HashMap<String,List<String>> map=new HashMap<>();for(String a:strs){char[] sc=a.toCharArray();Arrays.sort(sc);String key=String.valueOf(sc);List<String> list=map.getOrDefault(key,new ArrayList());list.add(a);map.put(key,list);}return new ArrayList<List<String>>(map.values());}
}
最长连续序列
class Solution {public int longestConsecutive(int[] nums) {int count=0;HashSet<Integer> set=new HashSet<>();for(int x:nums){set.add(x);}for(int x:set){if(!set.contains(x-1)){int flag=1;while(set.contains(++x)){flag++;}count=Math.max(flag,count);}}return count;}
}
移动零
class Solution {public void moveZeroes(int[] nums) {int slow=0;for(int i=0;i<nums.length;i++){if(nums[i]!=0){nums[slow++]=nums[i];}}Arrays.fill(nums,slow,nums.length,0);}
}
盛最多水的容器
class Solution {public int maxArea(int[] height) {int left=0,right=height.length-1;int ans=0;for(int i=0;i<height.length;i++){int high=right-left;int h=Math.min(height[right],height[left]);ans=Math.max(high*h,ans);if(height[right]<height[left]){right--;}else{left++;}}return ans;}
}
三数之和
class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> ans=new ArrayList<>();if(nums.length<3)return ans;Arrays.sort(nums);for(int i=0;i<nums.length-2;i++){if(nums[i]>0)return ans;if(i>0&&nums[i]==nums[i-1])continue;int left=i+1,right=nums.length-1;while(left<right){int sum=nums[i]+nums[left]+nums[right];if(sum==0){ans.add(new ArrayList(Arrays.asList(nums[i],nums[left],nums[right])));}if(sum>0){while(left<right&&nums[right]==nums[--right]);}else{while(left<right&&nums[left]==nums[++left]);}}}return ans; }
}
接雨水
class Solution {public int trap(int[] height) {int ans = 0;int[] maxleft = new int[height.length];int[] maxright = new int[height.length];for (int i = 1; i < height.length; i++) {maxleft[i] = Math.max(height[i - 1], maxleft[i - 1]);}for (int i = height.length - 2; i >= 0; i--) {maxright[i] = Math.max(maxright[i + 1], height[i + 1]);}for (int i = 1; i < height.length; i++) {int h = Math.min(maxleft[i], maxright[i]);if (h > height[i]) {ans += h - height[i];}}return ans;}
}
无重复字符的最长子串
class Solution {public int lengthOfLongestSubstring(String s) {int count=0,left=0;HashMap<Character,Integer> map=new HashMap<>();for(int i=0;i<s.length();i++){if(map.containsKey(s.charAt(i))){left=Math.max(left,map.get(s.charAt(i))+1);}count=Math.max(count,i-left+1);map.put(s.charAt(i),i);}return count;}
}
找到字符串中所有字母异位词
class Solution {public List<Integer> findAnagrams(String s, String p) {int len = p.length();List<Integer> ans = new ArrayList<>();char[] pc = p.toCharArray();Arrays.sort(pc);String key = String.valueOf(pc);for (int i = 0; i <= s.length() - len; i++) {char[] sc = s.substring(i, i + len).toCharArray();Arrays.sort(sc);if (key.equals(String.valueOf(sc))) {ans.add(i);}}return ans;}
}
和为 K 的子数组
class Solution {public int subarraySum(int[] nums, int k) {int sum=0,ans=0;HashMap<Integer,Integer> map=new HashMap<>();map.put(0,1);for(int i=0;i<nums.length;i++){sum+=nums[i];if(map.containsKey(sum-k)){ans+=map.get(sum-k);}map.put(sum,map.getOrDefault(sum,0)+1);}return ans;}
}
滑动窗口最大值
class Solution {public int[] maxSlidingWindow(int[] nums, int k) {if(nums.length==0||k==0)return new int[0];int[] res=new int[nums.length-k+1];Deque<Integer> deque=new LinkedList<>();for(int i=0,j=1-k;i<nums.length;i++,j++){if(j>0&&deque.peekFirst()==nums[j-1]){deque.removeFirst();}while(!deque.isEmpty()&&deque.peekLast()<nums[i]){deque.removeLast();}deque.addLast(nums[i]);if(j>=0){res[j]=deque.peekFirst();}}return res;}
}
最大子数组和
class Solution {public int maxSubArray(int[] nums) {int pre=0,ans=Integer.MIN_VALUE;for(int x:nums){pre=Math.max(pre+x,x);ans=Math.max(ans,pre);}return ans;}
}
合并区间
class Solution {public int[][] merge(int[][] intervals) {List<int[]> ans=new ArrayList<>();Arrays.sort(intervals,(a,b)->{return a[0]-b[0];});for(int i=0;i<intervals.length;i++){if(i<intervals.length-1&& intervals[i][1]>=intervals[i+1][0]){intervals[i+1][0]=intervals[i][0];intervals[i+1][1]=Math.max(intervals[i][1],intervals[i+1][1]);}else{ans.add(intervals[i]);}}return ans.toArray(new int[0][]);}
}
轮转数组
class Solution {public void rotate(int[] nums, int k) {int count=nums.length-k%nums.length-1;reverse(nums,0,count);reverse(nums,count+1,nums.length-1);reverse(nums,0,nums.length-1); }void reverse(int[] nums,int left,int right){while(left<right){int temp=nums[right];nums[right]=nums[left];nums[left]=temp;left++;right--;}}
}
除自身以外数组的乘积
class Solution {public int[] productExceptSelf(int[] nums) {int len=nums.length;int[] ans=new int[len];int[] L=new int[len];int[] R=new int[len];L[0]=1;for(int i=1;i<len;i++){L[i]=L[i-1]*nums[i-1];}R[len-1]=1;for(int i=len-2;i>=0;i--){R[i]=nums[i+1]*R[i+1];}for(int i=0;i<len;i++){ans[i]=L[i]*R[i];}return ans;}
}
缺失的第一个正数
class Solution {public int firstMissingPositive(int[] nums) {// 处理数组为空的情况if (nums == null || nums.length == 0) {return 1;}// 第一次遍历,将元素放到正确的位置for (int i = 0; i < nums.length; i++) {while (nums[i] > 0 && nums[i] <= nums.length && nums[nums[i] - 1] != nums[i]) {int temp = nums[nums[i] - 1];nums[nums[i] - 1] = nums[i];nums[i] = temp;}}// 第二次遍历,检查元素是否在正确位置for (int i = 1; i <= nums.length; i++) {if (nums[i - 1] != i) {return i;}}// 如果前面都没有找到缺失的正整数,那么缺失的就是数组长度加 1return nums.length + 1;}
}
矩阵置零
class Solution {public void setZeroes(int[][] matrix) {boolean[] row=new boolean[matrix.length];boolean[] col=new boolean[matrix[0].length];for(int i=0;i<matrix.length;i++){for(int j=0;j<matrix[0].length;j++){if(matrix[i][j]==0){row[i]=true;col[j]=true;}}}for(int i=0;i<matrix.length;i++){for(int j=0;j<matrix[0].length;j++){if(row[i]||col[j]){matrix[i][j]=0;}}}}
}
螺旋矩阵
class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> ans = new ArrayList<>();int up = 0, down = matrix.length - 1, left = 0, right = matrix[0].length - 1;while (true) {for (int i = left; i <= right; i++) {ans.add(matrix[up][i]);}up++;if (up > down)break;for (int i = up; i <= down; i++) {ans.add(matrix[i][right]);}right--;if (right < left)break;for (int i = right; i >= left; i--) {ans.add(matrix[down][i]);}down--;if (down < up)break;for (int i = down; i >= up; i--) {ans.add(matrix[i][left]);}left++;if (left > right)break;}return ans;}
}
旋转图像
class Solution {public void rotate(int[][] matrix) {int n=matrix.length-1;int[][] temp=new int[matrix.length][matrix.length];for(int i=0;i<matrix.length;i++){temp[i]=matrix[i].clone();}for(int i=0;i<matrix.length;i++){for(int j=0;j<matrix[0].length;j++){matrix[j][n-i]=temp[i][j];}}}
}
搜索二维矩阵 II
class Solution {public boolean searchMatrix(int[][] matrix, int target) {int i=0,j=matrix[0].length-1;while(j>=0&&i<matrix.length){if(target==matrix[i][j]){return true;}else if(target>matrix[i][j]){i++;}else{j--;}}return false;}
}
链表部分:
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) {* val = x;* next = null;* }* }*/
相交链表
public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode l1=headA;ListNode l2=headB;while(l1!=l2){l1=l1==null?headB:l1.next;l2=l2==null?headA:l2.next;}return l1;}
}
反转链表
class Solution {public ListNode reverseList(ListNode head) {ListNode cur=head,p=null;while(cur!=null){ListNode temp=cur.next;cur.next=p;p=cur;cur=temp;}return p; }
}
回文链表
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public boolean isPalindrome(ListNode head) {if (head == null || head.next == null) {return true;}//快慢指针找到中间节点ListNode fast = head, slow = head;while (fast.next != null && fast.next.next != null) {fast = fast.next.next;slow = slow.next;}// 翻转后半部分链表ListNode prev = null;ListNode cur = slow.next;while (cur != null) {ListNode temp = cur.next;cur.next = prev;prev = cur;cur = temp;}//分别从链表开头与翻转后的中间节点开始向后比较ListNode p1 = head;ListNode p2 = prev;while (p2 != null) {if (p1.val != p2.val) {return false;}p1 = p1.next;p2 = p2.next;}return true;}
}
环形链表
public class Solution {public boolean hasCycle(ListNode head) {if (head == null || head.next == null) {return false;}ListNode slow = head;ListNode fast = head.next;while (slow != fast) {if (fast == null || fast.next == null) {return false;}slow = slow.next;fast = fast.next.next;}return true;}
}
环形链表 II
public class Solution {public ListNode detectCycle(ListNode head) {Set<ListNode> set=new HashSet<>();ListNode cur=head;while(cur!=null){if(set.contains(cur)){return cur;}else{set.add(cur);}cur=cur.next;}return null;}
}
合并两个有序链表
class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {ListNode p=list1,q=list2;ListNode prehead = new ListNode(-1);ListNode prev = prehead;while(p!=null&&q!=null){if(p.val<=q.val){prev.next=p;p=p.next;}else{prev.next=q;q=q.next;}prev=prev.next;}prev.next = p == null ? q : p;return prehead.next;}
}
两数相加
class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode pre = new ListNode(0);ListNode cur = pre;int carry=0;while(l1!=null||l2!=null){int a=l1==null?0:l1.val;int b=l2==null?0:l2.val;cur.next=new ListNode((a+b+carry)%10);carry=(a+b+carry)/10;if (l1 != null) l1 = l1.next;if (l2 != null) l2 = l2.next;// 移动到结果链表的下一个节点cur = cur.next;}if(carry==1)cur.next=new ListNode(1);return pre.next;}
}
删除链表的倒数第 N 个结点
class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode dump=new ListNode(0);dump.next=head;ListNode slow=dump,fast=dump;while(n>0){fast=fast.next;n--;}while(fast.next!=null){fast=fast.next;slow=slow.next;}slow.next=slow.next.next;return dump.next;}
}
两两交换链表中的节点
class Solution {public ListNode swapPairs(ListNode head) {ListNode node=new ListNode(-1,head);ListNode pre=node;while(pre.next!=null&&pre.next.next!=null){ListNode l1=pre.next,l2=pre.next.next;l1.next=l2.next;l2.next=l1;pre.next=l2;pre=l1;}return node.next;}
}
K 个一组翻转链表
class Solution {public ListNode reverseKGroup(ListNode head, int k) {if (head == null || k <= 1)return head;ListNode dummy = new ListNode(0);dummy.next = head;ListNode prevGroupTail = dummy;int n = countNodes(head);while (n >= k) {ListNode groupHead = prevGroupTail.next;ListNode cur = groupHead;ListNode pre = null;for (int i = 0; i < k; i++) {ListNode temp = cur.next;cur.next = pre;pre = cur;cur = temp;}prevGroupTail.next = pre;groupHead.next = cur;prevGroupTail = groupHead;n -= k;}return dummy.next;}private int countNodes(ListNode head) {int count = 0;// 遍历链表并计算节点数while (head != null) {count++;head = head.next;}return count;}
}
138. 随机链表的复制
class Solution {public Node copyRandomList(Node head) {HashMap<Node,Node> map=new HashMap<>();Node cur=head;while(cur!=null){map.put(cur,new Node(cur.val));cur=cur.next;}cur=head;while(cur!=null){map.get(cur).next=map.get(cur.next);map.get(cur).random=map.get(cur.random);cur=cur.next;}return map.get(head);}
}
148. 排序链表
class Solution {public ListNode sortList(ListNode head) {if(head==null||head.next==null)return head;ListNode slow=head;ListNode fast=head;while(fast.next!=null&&fast.next.next!=null){slow=slow.next;fast=fast.next.next;}ListNode nhead=slow.next;slow.next=null;ListNode left= sortList(head);ListNode right=sortList(nhead);ListNode dummy=new ListNode(-1);ListNode cur=dummy;while(left!=null&&right!=null){if(left.val<right.val){cur.next=left;left=left.next;}else{cur.next=right;right=right.next;}cur=cur.next;}cur.next=left==null?right:left;return dummy.next;}
}
合并 K 个升序链表
class Solution {public ListNode mergeKLists(ListNode[] lists) {if(lists==null||lists.length==0)return null;PriorityQueue<ListNode> queue=new PriorityQueue<>(lists.length,Comparator.comparingInt(o->o.val));for(ListNode node:lists){if(node!=null)queue.add(node);}ListNode pre=new ListNode(-1);ListNode p=pre;while(!queue.isEmpty()){p.next=queue.poll();p=p.next;if(p.next!=null)queue.add(p.next);}return pre.next;}
}
146. LRU 缓存
class LRUCache {HashMap<Integer,Node> map=new LinkedHashMap<>();int _capacity;Node head,tail;class Node{int key;int values;Node pre;Node next;Node(int _key,int _values){key=_key;values=_values;}}public LRUCache(int capacity) {_capacity=capacity;head=new Node(-1,-1);tail=new Node(-1,-1);head.next=tail;tail.pre=head;}public int get(int key) {if(map.containsKey(key)){Node node=map.get(key);cutNode(node);insert(node);return node.values;}else{return -1;}}public void put(int key, int value) {if(map.containsKey(key)){Node node=map.get(key);node.values=value;cutNode(node);insert(node);}else{Node newNode=new Node(key,value);map.put(key,newNode);insert(newNode);if(map.size()>_capacity){Node node=cuttail();map.remove(node.key);}}}void cutNode(Node node){node.pre.next=node.next;node.next.pre=node.pre;node.pre=null;node.next=null;}void insert(Node node){node.next=head.next;head.next.pre=node;head.next=node;node.pre=head;}Node cuttail(){Node last=tail.pre;last.pre.next=tail;tail.pre=last.pre;last.pre=null;last.next=null;return last;}
}
树的定义:
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
二叉树的中序遍历
class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<Integer>();inorder(root, res);return res;}public void inorder(TreeNode root, List<Integer> res) {if (root == null) {return;}inorder(root.left, res);res.add(root.val);inorder(root.right, res);}
}
104. 二叉树的最大深度
class Solution {public int maxDepth(TreeNode root) {if(root==null){return 0;}int maxleft=maxDepth(root.left);int maxright=maxDepth(root.right);return Math.max(maxleft,maxright)+1;}
}
226. 翻转二叉树
class Solution {public TreeNode invertTree(TreeNode root) {if(root==null)return null;TreeNode left=invertTree(root.left);TreeNode right=invertTree(root.right);root.left=right;root.right=left;return root;}
}
101. 对称二叉树
class Solution {public boolean isSymmetric(TreeNode root) {return check(root, root);}public boolean check(TreeNode p, TreeNode q) {if (p == null && q == null) {return true;}if ((p == null || q == null)||(p.val != q.val)) {return false;}return check(p.left, q.right) && check(p.right, q.left);}
}
543. 二叉树的直径
class Solution {int ans;public int diameterOfBinaryTree(TreeNode root) {ans = 1;depth(root);return ans - 1;}public int depth(TreeNode node) {if (node == null) {return 0; // 访问到空节点了,返回0}int L = depth(node.left); // 左儿子为根的子树的深度int R = depth(node.right); // 右儿子为根的子树的深度ans = Math.max(ans, L+R+1); // 计算d_node即L+R+1 并更新ansreturn Math.max(L, R) + 1; // 返回该节点为根的子树的深度}
}
102. 二叉树的层序遍历
class Solution {public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> res=new ArrayList<>();Queue<TreeNode> queue=new LinkedList<>();if(root!=null)queue.offer(root);while(!queue.isEmpty()){List<Integer> tem=new ArrayList<>();for(int qsize=queue.size();qsize>0;qsize--){TreeNode node=queue.poll();if(node.left!=null)queue.offer(node.left);if(node.right!=null)queue.offer(node.right);tem.add(node.val);}res.add(tem);}return res;}
}
108. 将有序数组转换为二叉搜索树
class Solution {public TreeNode sortedArrayToBST(int[] nums) {return helper(nums, 0, nums.length - 1);}public TreeNode helper(int[] nums, int left, int right) {if (left > right) {return null;}// 总是选择中间位置左边的数字作为根节点int mid = (left + right) / 2;TreeNode root = new TreeNode(nums[mid]);root.left = helper(nums, left, mid - 1);root.right = helper(nums, mid + 1, right);return root;}
}
98. 验证二叉搜索树
class Solution {public boolean isValidBST(TreeNode root) {return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE);}public boolean isValidBST(TreeNode node, long lower, long upper) {if (node == null) {return true;}if (node.val <= lower || node.val >= upper) {return false;}return isValidBST(node.left, lower, node.val) && isValidBST(node.right, node.val, upper);}
}
230. 二叉搜索树中第 K 小的元素
class Solution {int count, ans;public int kthSmallest(TreeNode root, int k) {count = k;inOrder(root);return ans;}void inOrder(TreeNode root) {if (root == null || count == 0)return;inOrder(root.left);count--;if (count == 0) {ans = root.val;return;}inOrder(root.right);}
}
199. 二叉树的右视图
class Solution {List<Integer> ans = new ArrayList<>();public List<Integer> rightSideView(TreeNode root) {dfs(root, 0);return ans;}private void dfs(TreeNode root, int depth) {if (root == null) return;if (depth == ans.size()) ans.add(root.val);dfs(root.right, depth + 1);dfs(root.left, depth + 1);}
}
114. 二叉树展开为链表
class Solution {public void flatten(TreeNode root) {if (root == null) {return;}Stack<TreeNode> s = new Stack<TreeNode>();s.push(root);TreeNode pre = null;while (!s.isEmpty()) {TreeNode temp = s.pop();// 将指针的柚子树指向当前节点if (pre != null) {pre.right = temp;pre.left = null;}if (temp.right != null) {s.push(temp.right);}if (temp.left != null) {s.push(temp.left);}// 将指针移动到当前位置pre = temp;}}
}
105. 从前序与中序遍历序列构造二叉树
class Solution {Map<Integer, Integer> map = new HashMap<>();public TreeNode buildTree(int[] preorder, int[] inorder) {for(int i=0;i<inorder.length;i++){map.put(inorder[i],i);}return buildTwo(preorder,0,preorder.length-1,0,inorder.length-1);}TreeNode buildTwo(int[] preorder,int preorder_left,int preorder_right,int inorder_left,int inorder_right){if(preorder_left>preorder_right)return null;TreeNode root=new TreeNode(preorder[preorder_left]);int pindex=map.get(preorder[preorder_left]);root.left=buildTwo(preorder,preorder_left+1,pindex-1-inorder_left+preorder_left+1,inorder_left,pindex-1);root.right=buildTwo(preorder,pindex-1-inorder_left+preorder_left+1+1,preorder_right,pindex+1,inorder_right);return root;}
}
437. 路径总和 III
class Solution {int ans=0;HashMap<Long,Integer> map=new HashMap<>();public int pathSum(TreeNode root, int targetSum) {map.put(0L,1);dfs(root,targetSum,0L);return ans;}void dfs(TreeNode root,int targetSum,Long sum){if(root==null)return ;sum+=root.val;ans+=map.getOrDefault(sum-targetSum,0);map.put(sum,map.getOrDefault(sum,0)+1);dfs(root.left,targetSum,sum);dfs(root.right,targetSum,sum);map.put(sum,map.getOrDefault(sum,0)-1);return;}
}
236. 二叉树的最近公共祖先
class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root==null||root==p||root==q)return root;TreeNode left=lowestCommonAncestor(root.left,p,q);TreeNode right=lowestCommonAncestor(root.right,p,q);if(left==null&&right==null){return null;}if(left==null){return right;}if(right==null){return left;}return root;}
}
124. 二叉树中的最大路径和
class Solution {int maxSum = Integer.MIN_VALUE;public int maxPathSum(TreeNode root) {maxGain(root);return maxSum;}public int maxGain(TreeNode node) {if (node == null) {return 0;}// 递归计算左右子节点的最大贡献值// 只有在最大贡献值大于 0 时,才会选取对应子节点int leftGain = Math.max(maxGain(node.left), 0);int rightGain = Math.max(maxGain(node.right), 0);// 节点的最大路径和取决于该节点的值与该节点的左右子节点的最大贡献值int priceNewpath = node.val + leftGain + rightGain;// 更新答案maxSum = Math.max(maxSum, priceNewpath);// 返回节点的最大贡献值return node.val + Math.max(leftGain, rightGain);}
}
200. 岛屿数量
class Solution {private int res;public int numIslands(char[][] grid) {res = 0;for (int i = 0; i < grid.length; i ++) {for (int j = 0; j < grid[0].length; j ++) {if (grid[i][j] == '1') {dfsGrid(grid, i, j);res ++;}}}return res;}private void dfsGrid(char[][] grid, int row, int col) {if (row<0 || col<0 || row >= grid.length || col >= grid[0].length || grid[row][col] != '1' )return;grid[row][col] = '0';dfsGrid(grid, row - 1, col);dfsGrid(grid, row + 1, col);dfsGrid(grid, row, col - 1);dfsGrid(grid, row, col + 1);}
}
994. 腐烂的橘子
class Solution {int freshCount=0;public int orangesRotting(int[][] grid) {int row=grid.length;int col=grid[0].length;Queue<int[]> queue=new LinkedList<>();for(int i=0;i<row;i++){for(int j=0;j<col;j++){if(grid[i][j]==1){freshCount++;}else if(grid[i][j]==2){queue.add(new int[]{i,j});}}}int round=0;while(freshCount>0&&!queue.isEmpty()){round++;int n=queue.size();for(int i=0;i<n;i++){int[] orange=queue.poll();int x=orange[0];int y=orange[1];if(x-1>=0&&grid[x-1][y]==1){grid[x-1][y]=2;freshCount--;queue.add(new int[]{x-1,y});}if(x+1<row&&grid[x+1][y]==1){grid[x+1][y]=2;freshCount--;queue.add(new int[]{x+1,y});}if(y-1>=0&&grid[x][y-1]==1){grid[x][y-1]=2;freshCount--;queue.add(new int[]{x,y-1});}if(y+1<col&&grid[x][y+1]==1){grid[x][y+1]=2;freshCount--;queue.add(new int[]{x,y+1});}}}if(freshCount>0){return -1;}else{return round;}}
}
207. 课程表
class Solution {public boolean canFinish(int numCourses, int[][] prerequisites) {// 入度数组,用于记录每门课程的入度int[] inDegree=new int[numCourses];// 邻接表,存储每门课程的后续课程List<List<Integer>> adjList=new ArrayList<>();for(int i=0;i<numCourses;i++){adjList.add(new ArrayList<>());}// 计算每门课程的入度,并构建邻接表for(int[] course:prerequisites){inDegree[course[0]]++;adjList.get(course[1]).add(course[0]);}// 存储入度为 0 的课程的队列Queue<Integer> queue=new LinkedList<>();for(int i=0;i<numCourses;i++){if(inDegree[i]==0){queue.offer(i);}}// 记录已完成课程的数量int count=0;while(!queue.isEmpty()){int selectCourse=queue.poll();count++;// 获取当前课程的后续课程列表for(int x:adjList.get(selectCourse)){// 后续课程的入度减 1,将入度为0的加入队列inDegree[x]--;if(inDegree[x]==0){queue.offer(x);}}}if(count==numCourses)return true;return false;}
}
208. 实现 Trie (前缀树)
class Trie {class treeNode{boolean island;treeNode[] child;treeNode(){island=false;child=new treeNode[26];}}treeNode root;public Trie() {root=new treeNode();}public void insert(String word) {treeNode node=root;for(char i:word.toCharArray()){if(node.child[i-'a']==null){node.child[i-'a']=new treeNode();}node=node.child[i-'a'];}node.island=true;}public boolean search(String word) {treeNode node=root;for(char c:word.toCharArray()){if(node.child[c-'a']==null){return false;}node=node.child[c-'a'];}return node.island;}public boolean startsWith(String prefix) {treeNode node=root;for(char c:prefix.toCharArray()){if(node.child[c-'a']==null){return false;}node=node.child[c-'a'];}return true;}
}
46. 全排列
class Solution {List<List<Integer>> res = new LinkedList<>();public List<List<Integer>> permute(int[] nums) {var track = new ArrayList<Integer>();backtrack(nums, track);return res;}private void backtrack(int[] nums, ArrayList<Integer> track) {if(track.size() == nums.length) {res.add(new ArrayList<Integer>(track));return;}int n = nums.length;for(int i = 0; i < n; ++i) {if(track.contains(nums[i]))continue;track.add(nums[i]);backtrack(nums, track);track.removeLast();}}
}
78. 子集
class Solution {private final List<List<Integer>> ans = new ArrayList<>();private final List<Integer> path = new ArrayList<>();private int[] nums;public List<List<Integer>> subsets(int[] nums) {this.nums = nums;dfs(0);return ans;}private void dfs(int i) {if (i == nums.length) { // 子集构造完毕ans.add(new ArrayList<>(path)); // 复制 pathreturn;}// 不选 nums[i]dfs(i + 1);// 选 nums[i]path.add(nums[i]);dfs(i + 1);path.remove(path.size() - 1); // 恢复现场}
}
17. 电话号码的字母组合
class Solution {Map<Character, String> phoneMap = new HashMap<Character, String>() {{put('2', "abc");put('3', "def");put('4', "ghi");put('5', "jkl");put('6', "mno");put('7', "pqrs");put('8', "tuv");put('9', "wxyz");}};List<String> ans = new ArrayList<String>();public List<String> letterCombinations(String digits) {if(digits.length()==0)return ans;breakf(digits,0,new StringBuilder());return ans;}void breakf(String digits,int start,StringBuilder temp){if(start==digits.length()){ans.add(String.valueOf(temp));return;}char c=digits.charAt(start);String value=phoneMap.get(c);for(int i=0;i<value.length();i++){temp.append(value.charAt(i));breakf(digits,start+1,temp);temp.deleteCharAt(temp.length()-1);}}
}
39. 组合总和
class Solution {List<List<Integer>> res=new ArrayList<>();List<Integer> path=new ArrayList<>();public List<List<Integer>> combinationSum(int[] candidates, int target) {dfs(candidates,target,0);return res;}void dfs(int[] candidates, int target,int begin){if(target==0){res.add(new ArrayList(path));return;}if(target<0)return;for(int i=begin;i<candidates.length;i++){path.add(candidates[i]);dfs(candidates,target-candidates[i],i);path.removeLast();}}
}
22. 括号生成
class Solution {StringBuilder s=new StringBuilder();List<String> res=new ArrayList<String>();public List<String> generateParenthesis(int n) {dfs(n,0,0);return res;}public void dfs(int n,int left,int right){if(left==n&&right==n){res.add(String.valueOf(s));}if(left<n){s.append('(');dfs(n,left+1,right);s.deleteCharAt(s.length()-1);}if(right<left){s.append(')');dfs(n,left,right+1);s.deleteCharAt(s.length()-1);}}
}
79. 单词搜索
class Solution {public boolean exist(char[][] board, String word) {if (board.length == 0) {return false;}char[] chars = word.toCharArray();for (int i = 0; i < board.length; i++) {for (int j = 0; j < board[0].length; j++) {if (board[i][j] != chars[0])continue;if (dfs(i, j, board, 0, chars)) {return true;}}}return false;}private boolean dfs(int x, int y, char[][] board, int index, char[] chars) {if (x < 0 || x > board.length - 1 ||y < 0 || y > board[0].length - 1 ||board[x][y] != chars[index]) {return false;}if (index == chars.length - 1) {return true;}board[x][y] = '\0';if (dfs(x + 1, y, board, index + 1, chars) || dfs(x - 1, y, board, index + 1, chars)|| dfs(x, y + 1, board, index + 1, chars) || dfs(x, y - 1, board, index + 1, chars))return true;board[x][y] = chars[index];return false;}
}
131. 分割回文串
class Solution {private final List<List<String>> ans = new ArrayList<>();private final List<String> path = new ArrayList<>();private String s;public List<List<String>> partition(String s) {this.s = s;dfs(0, 0);return ans;}// start 表示当前这段回文子串的开始位置private void dfs(int i, int start) {if (i == s.length()) {ans.add(new ArrayList<>(path)); // 复制 pathreturn;}// 不选 i 和 i+1 之间的逗号(i=n-1 时一定要选)if (i < s.length() - 1) {dfs(i + 1, start);}// 选 i 和 i+1 之间的逗号(把 s[i] 作为子串的最后一个字符)if (isPalindrome(start, i)) {path.add(s.substring(start, i + 1));dfs(i + 1, i + 1); // 下一个子串从 i+1 开始path.remove(path.size() - 1); // 恢复现场}}private boolean isPalindrome(int left, int right) {while (left < right) {if (s.charAt(left++) != s.charAt(right--)) {return false;}}return true;}
}
35. 搜索插入位置
class Solution {public int searchInsert(int[] nums, int target) {int left=0,right=nums.length-1;while(left<=right){int mid=(right-left)/2+left;if(nums[mid]==target)return mid;if(nums[mid]>=target){right=mid-1;}if(nums[mid]<target){left=mid+1;}}return left;}
}
74. 搜索二维矩阵
class Solution {public boolean searchMatrix(int[][] matrix, int target) {int n=matrix[0].length;int left=0,right=matrix.length*n-1;while(left<=right){int mid=(right-left)/2+left;int temp=matrix[mid/n][mid%n];if(temp==target)return true;if(temp>target){right=mid-1;}else{left=mid+1;}}return false;}
}
34. 在排序数组中查找元素的第一个和最后一个位置
class Solution {/*** 二分查找*/public int[] searchRange(int[] nums, int target) {//寻找左边界(这里寻找第一个 >= target的索引)int leftIndex = search(nums, target);if (leftIndex >= nums.length || nums[leftIndex] != target){return new int[]{-1, -1};}//寻找右边界(这里寻找第一个 >= target+1的索引)int rightIndex = search(nums, target + 1);return new int[]{leftIndex, rightIndex - 1};}/*** 寻找第一个>=目标值的索引, 找不到则返回数组长度*/private int search(int[] nums, int target) {int left = 0;int right = nums.length - 1;while (left <= right){int mid = (right - left) / 2 + left;if (nums[mid] >= target){right = mid - 1;} else {left = mid + 1;}}return left;}
}
33. 搜索旋转排序数组
class Solution {public int search(int[] nums, int target) {int len = nums.length;if(len == 0) return -1;int left = 0, right = len - 1;// 1. 首先明白,旋转数组后,从中间划分,一定有一边是有序的。// 2. 由于一定有一边是有序的,所以根据有序的两个边界值来判断目标值在有序一边还是无序一边// 3. 这题找目标值,遇到目标值即返回// 4. 注意:由于有序的一边的边界值可能等于目标值,所以判断目标值是否在有序的那边时应该加个等号(在二分查找某个具体值得时候如果把握不好边界值,可以再每次查找前判断下边界值,也就是while循环里面的两个if注释)while(left <= right){// if(nums[left] == target) return left;// if(nums[right] == target) return right;int mid = left + (right - left) / 2;if(nums[mid] == target) return mid;// 右边有序if(nums[mid] < nums[right]){// 目标值在右边if(target > nums[mid] && target <= nums[right]){left = mid + 1;// 目标值在左边}else{right = mid - 1;}// 左边有序}else{// 目标值在左边if(target >= nums[left] && target < nums[mid]){right = mid - 1;// 目标值在右边}else{left = mid + 1;}}}return -1;}
}
153. 寻找旋转排序数组中的最小值
class Solution {public int findMin(int[] nums) {int ans=9999;int left=0,right=nums.length-1;while(left<=right){int mid=(right-left)/2+left;if(nums[mid]<nums[right]){right=mid-1;ans=Math.min(ans,nums[mid]);}else{ ans=Math.min(ans,nums[left]);left=mid+1;}}return ans;}
}
4. 寻找两个正序数组的中位数
class Solution {public double findMedianSortedArrays(int[] nums1, int[] nums2) {int m = nums1.length;int n = nums2.length;// 确保 nums1 是较短的数组,这样可以减少二分查找的范围if (m > n) {return findMedianSortedArrays(nums2, nums1);}int left = 0, right = m;while (left <= right) {// 在 nums1 中划分的位置int partition1 = (left + right) / 2;// 在 nums2 中划分的位置,使得左右两部分元素数量大致相等int partition2 = (m + n + 1) / 2 - partition1;// 获取划分位置左右两侧的元素值int maxLeft1 = (partition1 == 0) ? Integer.MIN_VALUE : nums1[partition1 - 1];int minRight1 = (partition1 == m) ? Integer.MAX_VALUE : nums1[partition1];int maxLeft2 = (partition2 == 0) ? Integer.MIN_VALUE : nums2[partition2 - 1];int minRight2 = (partition2 == n) ? Integer.MAX_VALUE : nums2[partition2];// 检查划分是否正确if (maxLeft1 <= minRight2 && maxLeft2 <= minRight1) {// 如果总元素个数是奇数,中位数是左半部分的最大值if ((m + n) % 2 == 1) {return Math.max(maxLeft1, maxLeft2);} else {// 如果总元素个数是偶数,中位数是左半部分最大值和右半部分最小值的平均值return (Math.max(maxLeft1, maxLeft2) + Math.min(minRight1, minRight2)) / 2.0;}} else if (minRight1 > maxLeft2) {// 划分位置在 nums1 中太靠右,需要向左移动right = partition1 - 1;} else {// 划分位置在 nums1 中太靠左,需要向右移动left = partition1 + 1;}}return -1;}
}
20. 有效的括号
class Solution {public boolean isValid(String s) {if(s.isEmpty())return true;Stack<Character> stack=new Stack<Character>();for(char c:s.toCharArray()){if(c=='('){stack.push(')');}else if(c=='{'){stack.push('}');}else if(c=='['){stack.push(']');}else if(stack.isEmpty()||stack.pop()!=c){return false;}}return true;}
}
155. 最小栈
class MinStack {Stack<Integer> s1=new Stack<>();Stack<Integer> s2=new Stack<>();public MinStack() {}public void push(int val) {s1.push(val);if(s2.isEmpty()||s2.peek()>=val){s2.push(val);}}public void pop() {if (s1.pop().equals(s2.peek())) {s2.pop();}}public int top() {return s1.peek();}public int getMin() {return s2.peek();}
}
739. 每日温度
class Solution {public int[] dailyTemperatures(int[] temperatures) {Stack<Integer> st=new Stack<>();int[] ans=new int[temperatures.length];for(int i=0;i<temperatures.length;i++){while(!st.isEmpty()&&temperatures[st.peek()] <temperatures[i]){int last=st.peek();ans[st.pop()]=i-last;}st.push(i);}return ans;}
}
215. 数组中的第K个最大元素
class Solution {public int findKthLargest(int[] nums, int k) {PriorityQueue<Integer> minHeap = new PriorityQueue<>(k);for (int num : nums) {if (minHeap.size() < k) {minHeap.offer(num);} else if (num > minHeap.peek()) {minHeap.poll();minHeap.offer(num);}}return minHeap.peek();}
}
347. 前 K 个高频元素
class Solution {public int[] topKFrequent(int[] nums, int k) {HashMap<Integer,Integer> map=new HashMap<>();for(int i=0;i<nums.length;i++){map.put(nums[i],map.getOrDefault(nums[i],0)+1);}PriorityQueue<Integer> queue=new PriorityQueue<>(k,(o1,o2)->(map.get(o2)-map.get(o1)));for(int x:map.keySet()){queue.add(x);}int[] ans=new int[k];for(int i=0;i<k;i++){ans[i]=queue.poll();}return ans;}
}
121. 买卖股票的最佳时机
class Solution {public int maxProfit(int[] prices) {int cost=prices[0],profit=0;for(int price:prices){cost=Math.min(cost,price);profit=Math.max(profit,price-cost);}return profit;}
}
55. 跳跃游戏
class Solution {public boolean canJump(int[] nums) {int start=0;int end=1;int count=0;while(end<nums.length){int maxpos=0;for(int i=start;i<end;i++){maxpos=Math.max(maxpos,nums[i]+i);}if(maxpos==0)return false;start=end;end=maxpos+1; }return true;}
}
45. 跳跃游戏 II
class Solution {public int jump(int[] nums) {int start=0;int end=1;int count=0;while(end<nums.length){int maxpos=0;for(int i=start;i<end;i++){maxpos=Math.max(nums[i]+i,maxpos);}start=end;end=1+maxpos;count++;}return count;}
}
763. 划分字母区间
class Solution {public List<Integer> partitionLabels(String s) {int[] last = new int[26];for (int i = 0; i < s.length(); i++) {last[s.charAt(i) - 'a'] = i;}List<Integer> ans = new ArrayList<>();int maxpoi = 0, start = 0;for (int i = 0; i < s.length(); i++) {maxpoi = Math.max(maxpoi, last[s.charAt(i) - 'a']);if (i == maxpoi) {ans.add(maxpoi - start + 1);start = i + 1;}}return ans;}
}
70. 爬楼梯
class Solution {//当楼梯为1时,那就是1;当楼梯为2时,那就是2;//当楼梯为3时,那就是1+2=3;当楼梯为4时,那就是2+3=5。当楼梯为5时,那就是3+5等于8.public int climbStairs(int n) {int a=1,b=1,sum=0;for(int i=1;i<n;i++){sum=a+b;a=b;b=sum;}return b;}
}
118. 杨辉三角
class Solution {public List<List<Integer>> generate(int numRows) {// 创建一个存储所有行的列表List<List<Integer>> ans = new ArrayList<>();// 外层循环遍历每一行for (int i = 0; i < numRows; i++) {// 创建当前行的临时列表List<Integer> temp = new ArrayList<>();// 每行的第一个元素总是1temp.add(1);// 内层循环计算当前行的中间元素for (int j = 1; j < i; j++) {// 当前元素是上一行相邻两个元素的和temp.add(ans.get(i - 1).get(j - 1) + ans.get(i - 1).get(j));}// 如果当前行不是第一行,添加最后一个元素1if (i > 0) temp.add(1);// 将当前行添加到结果列表中ans.add(temp);}// 返回生成的杨辉三角return ans;}
}
198. 打家劫舍
class Solution {public int rob(int[] nums) {if (nums.length == 0) {return 0;}// 子问题:// f(k) = 偷 [0..k) 房间中的最大金额// f(0) = 0// f(1) = nums[0]// f(k) = max{ rob(k-1), nums[k-1] + rob(k-2) }int N = nums.length;int[] dp = new int[N + 1];dp[0] = 0;dp[1] = nums[0];for (int k = 2; k <= N; k++) {dp[k] = Math.max(dp[k - 1], nums[k - 1] + dp[k - 2]);}return dp[N];}
}
322. 零钱兑换
class Solution {public int coinChange(int[] coins, int amount) {int[] dp = new int[amount + 1];// 初始化数组Arrays.fill(dp, -1);dp[0] = 0;for (int i = 1; i <= amount; i++) {for (int coin : coins) {if (i >= coin && dp[i - coin] != -1) {if (dp[i] == -1 || dp[i] > dp[i - coin] + 1) {dp[i] = dp[i - coin] + 1;}}}}return dp[amount];}
}
139. 单词拆分
class Solution {public boolean wordBreak(String s, List<String> wordDict) {HashSet<String> wordDictSet = new HashSet(wordDict);boolean[] dp = new boolean[s.length() + 1];dp[0] = true;for (int i = 0; i <= s.length(); i++) {for (int j = 0; j < i; j++) {if (dp[j] && wordDictSet.contains(s.substring(j, i))) {dp[i] = true;break;}}}return dp[s.length()];}
}
300. 最长递增子序列
class Solution {public int lengthOfLIS(int[] nums) {/*贪心法加二分查找,如果当前元素比最后一个大,那就直接添加,否则就在前边有序中找适合他的位置,替换那个位置,长度始终不会比当前小,不断替换元素*/int len=nums.length,cur=1;int[] dp=new int[len+1];dp[cur]=nums[0];for(int i=1;i<len;i++){if(dp[cur]<nums[i]){dp[++cur]=nums[i];}else{int l=1,r=cur,pos=0;while(l<=r){int mid=(r-l)/2+l;if(dp[mid]>nums[i]){r=mid-1;}else{pos=mid;l=mid+1;}}dp[pos+1]=nums[i];}}return cur;}
}
152. 乘积最大子数组
class Solution {public int maxProduct(int[] nums) {int max=Integer.MIN_VALUE;int imax=1,imin=1;for(int num:nums){if(num<0){int temp=imax;imax=imin;imin=temp;}imax=Math.max(imax*num,num);imin=Math.min(imin*num,num);max=Math.max(imax,max);}return max;}
}
416. 分割等和子集
class Solution {public boolean canPartition(int[] nums) {int sum=0;for(int x:nums){sum+=x;}if(sum%2==1)return false;sum=sum/2;int[] dp=new int[sum+1];for(int i=0;i<nums.length;i++){for(int j=sum;j>=nums[i];j--){dp[j]=Math.max(dp[j],dp[j-nums[i]]+nums[i]);}}if(dp[sum]==sum)return true;return false;}
}
62. 不同路径
class Solution {public int uniquePaths(int m, int n) {int[][] grid=new int[m][n];for(int i=0;i<m;i++){grid[i][0]=1;}Arrays.fill(grid[0], 1);for(int i=1;i<m;i++){for(int j=1;j<n;j++){grid[i][j]=grid[i-1][j]+grid[i][j-1];}}return grid[m-1][n-1];}
}
64. 最小路径和
class Solution {public int minPathSum(int[][] grid) {for(int i=0;i<grid.length;i++){for(int j=0;j<grid[0].length;j++){if(i==0&&j==0)continue;if(i==0)grid[i][j]=grid[i][j-1]+grid[i][j];if(j==0)grid[i][j]=grid[i][j]+grid[i-1][j];if(i!=0&&j!=0)grid[i][j]=grid[i][j]+Math.min(grid[i-1][j],grid[i][j-1]);}}return grid[grid.length-1][grid[0].length-1];}
}
1143. 最长公共子序列
class Solution {public int longestCommonSubsequence(String text1, String text2) {int m=text1.length(),n=text2.length();int[][] dp=new int[m+1][n+1];Arrays.fill(dp[0],0);for(int i=0;i<m;i++){dp[i][0]=0;}for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){if(text1.charAt(i-1)==text2.charAt(j-1)){dp[i][j]= dp[i-1][j-1]+1;}else{dp[i][j]=Math.max(dp[i-1][j],dp[i][j-1]);}}}return dp[m][n];}
}
72. 编辑距离
class Solution {public int minDistance(String word1, String word2) {int n = word1.length();int m = word2.length();// 有一个字符串为空串if (n * m == 0) {return n + m;}// DP 数组int[][] D = new int[n + 1][m + 1];// 边界状态初始化for (int i = 0; i < n + 1; i++) {D[i][0] = i;}for (int j = 0; j < m + 1; j++) {D[0][j] = j;}// 计算所有 DP 值for (int i = 1; i < n + 1; i++) {for (int j = 1; j < m + 1; j++) {int left = D[i - 1][j] + 1;int down = D[i][j - 1] + 1;int left_down = D[i - 1][j - 1];if (word1.charAt(i - 1) != word2.charAt(j - 1)) {left_down += 1;}D[i][j] = Math.min(left, Math.min(down, left_down));}}return D[n][m];}
}
136. 只出现一次的数字
class Solution {public int singleNumber(int[] nums) {int sigle=0;for(int x:nums){sigle=sigle^x;}return sigle;}
}
169. 多数元素
class Solution {public int majorityElement(int[] nums) {int a=1,key=0;key=nums[0];for(int i=1;i<nums.length;i++){if(key==nums[i]){a++;}else{a--;}if(a<0){key=nums[i];a=1;}}return key;}
}
75. 颜色分类
class Solution {public void sortColors(int[] nums) {int r=0,w=0,b=0;for(int x:nums){if(x==0)r++;if(x==1)w++;if(x==2)b++;}Arrays.fill(nums,0,r,0);Arrays.fill(nums,r,w+r,1);Arrays.fill(nums,r+w,r+w+b,2);}
}
31. 下一个排列
class Solution {// 寻找下一个排列public void nextPermutation(int[] nums) {int pos = -1;// 寻找第一个比后边小的数for (int i = nums.length - 1; i > 0; i--) {if (nums[i] > nums[i - 1]) {pos = i - 1;break;}}// 没找到直接反转数组if (pos == -1) {reverse(nums, 0, nums.length - 1);return;}// 找到 交换他和前边的数,然后翻转pos之后的数for (int i = nums.length - 1; i > 0; i--) {if (nums[pos] < nums[i]) {swap(nums, i, pos);reverse(nums, pos + 1, nums.length - 1);return;}}}void swap(int[] nums, int a, int b) {int temp = nums[a];nums[a] = nums[b];nums[b] = temp;}void reverse(int[] nums, int left, int right) {while (left < right) {int temp = nums[left];nums[left] = nums[right];nums[right] = temp;left++;right--;}}
}
287. 寻找重复数
class Solution {public int findDuplicate(int[] nums) {int slow = nums[0], fast = nums[nums[0]];while (slow != fast) {slow = nums[slow];fast = nums[nums[fast]];}fast = 0;while (slow != fast) {slow = nums[slow];fast = nums[fast];}return fast;}
}
相关文章:
LeetCode100题
LeetCode100 两数之和 遍历数组,以哈希表存数与下标,边存边查,速找和为目标值的两数下标 class Solution {public int[] twoSum(int[] nums, int target) {int[] ansnew int[2];HashMap<Integer,Integer> mapnew HashMap<>();…...
鸿蒙代码@Builder
#代码如下: Entry Component struct CardExample {State title: string "欢迎使用鸿蒙";State content: string "这是一段自定义内容";build() {Column() {this.MyCard({ title: this.title, content: this.content })}.padding(20)}BuilderM…...
Gewechat启动启动报错
Centos7,测试连接时发现这个错误。 [rootxin ~]# curl -i -X POST http://127.0.0.1:2531/v2/api/tools/getTokenId curl: (56) Recv failure: Connection reset by peer 1、删除原容器,重新构建。 docker run -itd \--name gewe \--privileged \-v /ro…...
硅谷甄选41集-71集
第四十三集:完全按照视频敲代码的话会发现左侧顶部tabbar的display:flex失效了,是因为拆分开的子组件里面多了一个div,去掉就好了,vue3不需要再额外包裹元素。因为路径变化了,所以找不到图片的话在前面再加一个…。 第四十五集&am…...
PyQt6实例_消息工具_使用与完整代码分享
目录 使用 每日消息 全局查询 更新数据库 代码 数据库表创建 代码-数据库相关操作 代码-界面与操作逻辑 视频 使用 工具有三个面板:每日消息、全局查询、更新数据库 “每日消息”和“全局查询”,数据源:同花顺7x24小时快讯 “更新…...
docker配置mysql遇到的问题:网络连接超时、启动mysql失败、navicat无法远程连接mysql
目录 1.网络超时 方式1. 网络连接问题 方式2. Docker镜像源问题 方式3.使用国内镜像源 2.启动mysql镜像失败 3.navicat无法远程连接mysql 1.网络超时 安装MySQL时出现超时问题,可能由多种原因导致: 方式1. 网络连接问题 原因:网络不稳定…...
【虚幻C++笔记】碰撞检测
目录 碰撞检测参数详情示例用法 碰撞检测 显示名称中文名称CSphere Trace By Channel按通道进行球体追踪UKismetSystemLibrary::SphereTraceSingleSphere Trace By Profile按描述文件进行球体追踪UKismetSystemLibrary::SphereTraceSingleByProfileSphere Trace For Objects针…...
SpringBoot集成WebSocket,单元测试执行报错
问题描述 SpringBoot集成了WebSocket,单元测试启动后会报如下错误:javax.websocket.server.ServerContainer not available 这是因为SpringBootTest启动时不会启动服务器,所以WebSocket会报错。 解决方案 在注解中添加 webEnvironmen…...
Git基本操作
1. 安装与配置 安装:你可以从 Git 官方网站 下载 Windows 版本的安装程序。运行安装程序,在安装过程中,你可以按照默认设置进行安装,也可以根据自己的需求进行调整。配置:安装完成后,打开 Git Bash&#x…...
C++异步并发支持库future
future: 1.利用共享状态来异步的获取提供者的值 2.future处于共享状态就绪时才是有效的 3.future不能拷贝构造,只能移动构造,并且移动构造后共享状态失效 std::future::get 1.当共享状态就绪时,返回存储在共享状态中的值。 2…...
c++学习小结
内存分配 空间 栈区(stack)。编译器⾃动分配与释放,主要存放函数的参数值,局部变量值等,连续的内存空 间,由⾼地址向低地址扩展。 堆区(heap) 。由程序员分配与释放;不…...
Pygame物理模拟:实现重力、弹跳与简单物理引擎
Pygame物理模拟:实现重力、弹跳与简单物理引擎 大家好,欢迎来到本期的技术分享!今天我们将一起探讨如何使用Python和Pygame库来实现一个简单的物理模拟系统,其中包括重力、弹跳以及一个基础的物理引擎。如果你对游戏开发或者物理仿真感兴趣,那么这篇文章一定会让你受益匪…...
Python dotenv 使用指南:轻松管理项目环境变量
一、为什么要使用环境变量管理? 很多开发者容易把自己开发的项目上传到Github上,但偶尔会忘记把数据库密码、支付接口密钥等敏感信息和谐掉,当代码提交上去时,这些信息就像裸奔一样暴露在所有人面前。更糟糕的是,不同…...
网络攻防第一~四集
来源于一下 【小迪安全】红蓝对抗 | 网络攻防 | V2023全栈培训_哔哩哔哩_bilibili 目录 第一集 第二集 第一集 web架构包括系统、中间件、程序源码、数据库 系统 windows、linux、windows server 中间件 是前端语言和数据库是当做一个桥梁,当做解析作用&…...
TI---sysconfig生成宏
核心内容概览 1. 宏定义的总体作用 SysConfig生成的宏定义是硬件配置的符号化映射,将图形化界面的配置参数转化为可直接引用的编译时常量,核心价值包括: 免硬编码:避免手动写入硬件参数(如引脚号、波特率࿰…...
【C】初阶数据结构13 -- 快速排序
本篇文章主要讲解经典的排序算法 -- 快速排序算法 目录 1 递归版本的快速排序 1) 算法思想 (1) hoare 版本 (2) 双指针版本 (3) 挖坑法 2) 代码 3) 时间复杂度…...
Spring Boot 3.4 实战指南:从性能优化到云原生增强
一、核心新特性概览 Spring Boot 3.4 于 2024 年 11 月正式发布,带来 6 大维度的 28 项改进。以下是实战开发中最具价值的特性: 1. 性能革命:虚拟线程与 HTTP 客户端优化 虚拟线程支持:Java 21 引入的虚拟线程在 Spring Boot 3…...
Git分支重命名与推送参数解析
这两个参数的解释如下: git branch -M master 中的 -M 参数 -M 是 --move --force 的组合简写,表示强制重命名当前分支为 master。如果当前分支已经存在名为 master 的分支,-M 会强制覆盖它(慎用,可能导致数据丢失&…...
深度学习中的预训练与微调:从基础概念到实战应用全解析
摘要 本文系统解析深度学习中预训练与微调技术,涵盖核心概念、技术优势、模型复用策略、与迁移学习的结合方式,以及微调过程中网络参数更新机制、模型状态分类等内容。同时深入分析深层神经网络训练难点如梯度消失/爆炸问题,为模型优化提供理…...
EMC-148.5MHz或85.5辐射超标-HDMI
EMC 148.5MHz或85.5辐射超标-HDMI 遇到了一台设备过不了EMC ,经排查主要是显示器的HDMI问题 解决办法看看能否更换好一点的HDMI线缆...
DeepSeek系列(9):团队协作最佳实践
团队知识库构建 在知识经济时代,团队知识的有效管理和传递是组织核心竞争力的关键。DeepSeek可以成为打造高效团队知识库的得力助手,让知识管理从繁重工作变为自动化流程。 知识库架构设计 多层次知识结构 一个高效的团队知识库应具备清晰的层级结构,DeepSeek可以协助:…...
信息系统项目管理工程师备考计算类真题讲解十
一、立项管理 1)折现率和折现系数:折现也叫贴现,就是把将来某个时间点的金额换算成现在时间点的等值金额。折现时所使用的利率叫折现率,也叫贴现率。 若n年后能收F元,那么这些钱在现在的价值,就是现值&am…...
第1章 基础知识
1.1 机器语言 1.2 汇编语言的产生 用汇编语言编写程序的工作过程如下: 1.编写程序:汇编程序包括汇编指令、伪指令、其他符号,如下图。其中,“伪指令”并不是由计算机直接执行的指令,而是帮助编译器完成“编译”的符号。 2.编译:将汇编程序转换成机器码。 3.计算机执行。 …...
16.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--Github Action
GitHub Actions 是 GitHub 提供的持续集成和持续部署(CI/CD)平台,它允许我们自动化软件开发工作流程。通过 GitHub Actions,我们可以构建、测试和部署代码,而无需手动干预。 一、基本概念 1.1 Workflow(工作流) 工作…...
MySQL 事务隔离级别详解
以下是 MySQL 支持的四种事务隔离级别及其特性,按并发安全性从低到高排列: 1. 读未提交 (Read Uncommitted) 问题: 脏读 (Dirty Read):事务可读取其他事务未提交的数据。不可重复读 (Non-repeatable Read)&am…...
A. Ambitious Kid
time limit per test 1 second memory limit per test 256 megabytes Chaneka, Pak Chaneks child, is an ambitious kid, so Pak Chanek gives her the following problem to test her ambition. Given an array of integers [A1,A2,A3,…,AN][A1,A2,A3,…,AN]. In one o…...
C19-while循环及for循环等价引入
一 while的表达式 //while的表达式有三个 #include <stdio.h> int main() { int sum; int data1; //第一个表达式,条件的初始值while(data<100){ //第二个表达式,条件的临界值sumsumdata;data; //第三个表达式,条件变化}printf("0至100的和是:%d\n",sum);…...
华为盘古OS深度评测:构建AI自进化系统的实践密码
华为盘古OS通过分布式AI内核与自适应学习框架的深度耦合,重新定义操作系统级智能能力。实测显示其AI任务调度效率较传统系统提升17倍,本文从智能体编排、持续学习机制、端云协同架构三个维度,解析如何基于DevKit 3.0打造具备认知进化能力的下…...
SpringBoot UserAgentUtils获取用户浏览器 操作系统设备统计 信息统计 日志入库
介绍 UserAgentUtils 是于处理用户代理(User-Agent)字符串的工具类,一般用于解析和处理浏览器、操作系统以及设备等相关信息,这些信息通常包含在接口请求的 User-Agent 字符串中。 这个库可以用于解析用户代理头,以提…...
PCL绘制点云+法线
读取的点云ASCII码文件,每行6个数据,3维坐标3维法向 #include <iostream> #include <fstream> #include <vector> #include <string> #include <pcl/point_types.h> #include <pcl/point_cloud.h> #include <pc…...
DataStreamAPI实践原理——计算模型
引入 Apache Flink 是一个框架和分布式处理引擎,用于在 无边界 和 有边界 数据流上进行有状态的计 算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。Flink可以处理批数据也可以处理流数据,本质上,流处理…...
【那些年踩过的坑】Docker换源加速详细教程(截至2025年4月)
由于各种网络政策,在国内访问DockerHub速度会非常缓慢,大家一般都会采取更换镜像源的方式来进行加速。但是,2024.6之后,由于政策的加强,大部分常见的镜像源已经无法使用,可能在更换镜像源后出现如下报错信息…...
【MCP】详细了解MCP协议:和function call的区别何在?如何使用MCP?
本文介绍了MCP大模型上下文协议的的概念,并对比了MCP协议和function call的区别,同时用python sdk为例介绍了mcp的使用方式。 1. 什么是MCP? 官网:https://modelcontextprotocol.io/introduction 2025年,Anthropic提出…...
交换机之配置系统基本信息(Basic Information of the Configuration System for Switches)
交换机之配置系统基本信息 本文章中的信息都是基于一些特定实验环境写的。文章中使用的所有设备最初均采用缺省配置启动。如果不按初始配置,有可能会导致本文中的部分或全部步骤失败。如果您使用的是真实网络设备,请确保您已经了解所有使用过的命令影响。…...
贝叶斯算法学习
贝叶斯算法学习 贝叶斯算法基础与原理应用场景主要分类优缺点简单示例代码实现 贝叶斯算法是基于贝叶斯定理的一种统计学习方法,在机器学习、数据挖掘、自然语言处理等领域有广泛应用。以下是其原理、应用和示例的详细介绍: 贝叶斯算法基础与原理 贝…...
Java 日志:掌握本地与网络日志技术
日志记录是软件开发中不可或缺的一部分,它为开发者提供了洞察应用程序行为、诊断问题和监控性能的手段。在 Java 生态系统中,日志框架如 Java Util Logging (JUL)、Log4j 和 Simple Logging Facade for Java (SLF4J) 提供了丰富的功能。然而,…...
线程池单例模式
线程池的概念 线程池是一种线程使用模式。 一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。…...
物联网安全解决方案介绍:有效利用现有的下一代防火墙
管理物联网设备安全的挑战 如今,随着IoT(物联网)的普及,可以集中管理相机、打印机、传感器、电器、机床等各种设备,并分析和有效利用从这些设备收集的数据。这些设备已成为商业环境中不可或缺的一部分,但设备的多样化使其难以管理。与PC、服务器和网络设备不同,识别物联…...
Java社区门诊系统源码 SaaS医院门诊系统源码 可上线运营
Java社区门诊系统源码 SaaS医院门诊系统源码 医院门诊系统适用于:社区卫生服务站、门诊部、诊所、村卫生室等,有上百家医疗机构正常使用;包括医保结算。 系统功能 (一)后端管理系统功能 用户管理:提供用…...
如何在 Windows 10 中使用 WSL 和 Debian 安装 Postgresql 和 Postgis
安装 Postgresql 和 Postgis 的常规方法需要设置多个二进制文件,并且工作流程通常在图形用户界面 (GUI) 上进行。我们希望找到一种在 Windows 10 中安装 Postgresql 和 Postgis 的方法,同时保留 Linux 的 shell 体验。本教程展示了在 Windows 10 中的 De…...
[论文解析]Mip-Splatting: Alias-free 3D Gaussian Splatting
Mip-Splatting: Alias-free 3D Gaussian Splatting 论文地址:https://arxiv.org/abs/2403.17888 源码地址:https://github.com/autonomousvision/mip-splatting 项目地址:https://niujinshuchong.github.io/mip-splatting/ 论文解读 两个主…...
MongoDB 入门使用教程
MongoDB 入门使用教程 MongoDB 是一个开源的 NoSQL 数据库,使用文档(JSON-like)存储数据,与传统的关系型数据库不同,它不依赖表结构和行列的约束。MongoDB 提供了强大的查询能力,支持高效的数据存储和检索…...
PowerBI动态路径获取数据技巧
PowerBI动态路径获取数据技巧 场景一:同事接力赛——不同电脑共用模板 (想象一下:小王做完报表要传给小李,结果路径总对不上怎么办?) 这种情况就像接力赛交接棒,每台电脑的账户名不同࿰…...
【数据结构】优先级队列
目录 1. 优先级队列概念 2. 优先级队列的模拟实现 2.1 堆的概念 2.2 堆的存储方式 2.3 堆的创建 2.3.1 向下调整的时间复杂度 2.3.2 建堆时间复杂度 2.3.3 向上调整的时间复杂度 2.4 堆的插入与删除 3. 堆的应用 4. 常用接口介绍 4.1 PriorityQueue的特性 4.2 Pri…...
Myweb项目——面试题总结
一.项目描述 项⽬概述:本项⽬在云服务上开发了⼀个后端服务器与前端⻚⾯为⼀体的⾳乐专辑 鉴赏⽹站,旨在为⽤⼾提供丰富的⾳乐专辑信息展⽰和优 质的浏览体验。 主要内容及技术: 后端开发:利⽤ C 语⾔构建后端服务器,…...
用高德API提取广州地铁线路(shp、excel)
目录 结果示例html文件——直观看出输出的效果excel文件——包括地铁的具体信息完整代码网络上现有的地铁数据要么过于老旧且不便于更新,要么过于定制化限定于具体的城市无法灵活调整得到自己真正想要的那部份数据。而使用高德的API可以非常方便得到全国各地的地铁数据,而且可…...
leetcode110 平衡二叉树
一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数。二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数。 递归:…...
二、信息时代社会结构的转变
到了信息时代,以及在核武器的前提下,上述的社会结构的逻辑,就有了一个根 本性的转变,就是暴力的成本和收益,都在下降。 暴力的成本在降低。比如说枪支,它的制造和分发都变得非常容易。现在我们都 知道有 3D 打印,它就好像工业时代的印刷机,印刷圣经或者书籍,使知识更加 普及和容…...
Vue2+ElementUI实现无限级菜单
使用Vue2和ElementUI实现无限级菜单,通常菜单数据以树形结构存储,每个菜单包含多个子菜单 ,子菜单又可以继续包含更深层次的子菜单项。所以,需要使用递归形式,完成子项菜单的渲染。 这里,结合Element UI界面的el-menu和el-submenu组件来构建菜单结构,有子菜单时使用el-s…...
YTJ笔记——FFT、NCC
FFT算法 快速傅里叶算法 为了计算两个多项式相乘(卷积),将多项式系数表示法转换成点值表示法 F(g(x)∗f(x))F(g(x))F(f(x)) 超详细易懂FFT(快速傅里叶变换)及代码实现_傅立叶变换编程-CSDN博客 NCC算法…...