java
做图像加密的Tara
Keep learning
展开
-
网络中的一些概念
1、三种通信方式:单工:只有一方能发送数据,另一方接收数据。比如广播。半双工:双方都能发送数据,但是不能同时发。比如对讲机。全双工:双方都能同时发送数据。比如电话。端口带宽=速率*22、TCP协议中FLAGS字段的几个标识URG:紧急位(urgent)。代表高优先级,即发送端优先发送,而不是在缓存中排队。ACK:确认字符(Acknowledge character),置1代表确认建立了会话,0代表无效。PSH:push。有 DATA数据传输,置1代表接收端优先读取,而不是在缓存中原创 2021-07-17 21:33:08 · 288 阅读 · 1 评论 -
数组中数字出现的次数
题意:在一个数组nums中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。示例1:输入:nums=[3, 4, 3, 3]输出:4示例2:输入:nums=[9,1,7,9,7,9,7]输出:1class Solution { public int singleNumber(int[] nums) { int a = 0; int b = 0; for(int num : n..原创 2021-07-16 22:23:19 · 291 阅读 · 0 评论 -
和为s的两个数字
题意:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [30,10]分析:本质是在数组中查找满足等式a+b=s的元素a,b。由于数组是递增排序,则可选择二分查找。publi.原创 2021-07-15 21:53:22 · 144 阅读 · 1 评论 -
顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。思路:模拟、设定边界,清晰图解。考虑设定矩阵的“左、上、右、下”四个边界,模拟以上矩阵遍历顺序。public class Solution { public int[] spiralOrder(int[][] matrix) { if(matrix.length == 0) return new int[0]; int l = 0, r = matrix[0].length - 1, t = 0.原创 2021-07-01 23:43:00 · 123 阅读 · 2 评论 -
二叉树的镜像
思路:前序遍历交换左右子树public class Solution { public TreeNode mirrorTree(TreeNode root) { if(root == null) return null; TreeNode left = mirrorTree(root.left); TreeNode right = mirrorTree(root.right); root.left = right; .原创 2021-06-30 23:02:04 · 97 阅读 · 2 评论 -
树的子结构
判断是不是二叉树的子树public class Solution { public boolean isSubStructure(TreeNode A, TreeNode B){ if (A==null||B==null) return false; return dfs(A,B)||isSubStructure(A.left,B)||isSubStructure(A.right,B); } public boolean dfs(TreeNode原创 2021-06-29 23:15:25 · 110 阅读 · 1 评论 -
快要结束的一天
今天快要结束了,可我还没写博客。可能人的一生中,就是会尽力做一些事,结果是为他人做嫁衣裳吧。明天一定更之前的加密算法,不更我就是狗。原创 2021-06-28 23:47:57 · 165 阅读 · 0 评论 -
二叉树的镜像
public TreeNode mirrorTree(TreeNode root) { if (root == null) return null; TreeNode tmpNode = root.left; root.left = mirrorTree(root.right); root.right = mirrorTree(tmpNode); return ro.原创 2021-06-27 22:35:07 · 90 阅读 · 1 评论 -
合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例输入:1->2->4, 1->3->4输出:1->1->2->3->4->4 迭代法public class Solution { public ListNode mergeTwoList(ListNode l1,ListNode l2){ //链表类问题,设置dummyHead是一个常规操作,主要是为了避免讨论头节点,不一定是头节点丢.原创 2021-06-22 21:42:19 · 105 阅读 · 1 评论 -
调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums = [1,2,3,4]输出:[1,3,2,4]注:[3,1,2,4] 也是正确的答案之一。实现:public class JZ21 { public int[] exchange(int[] nums){ //思路一 双指针? 效率有点低 int left=0; int right=nums.leng.原创 2021-06-20 23:46:54 · 100 阅读 · 0 评论 -
打印从1到最大的n位数
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。 思路最大的一位数9 二位数 99 三位数 999…res=10^n-1;如果返回int类型数组,则不考虑大数越界。区间[1,10^n-1] 步长为1public class Solution { public int[] printNumbers(int n){ //不考虑大数越界 int size=(int)Math.pow(10.原创 2021-06-18 22:36:24 · 136 阅读 · 2 评论 -
数值的整数次方
实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题。public class JZ16 { public double myPow(double x, int n){ // 1.笨办法 // double res=1.0;// if(n>=0){// if (n==0){// return 1;// .原创 2021-06-17 22:02:57 · 104 阅读 · 0 评论 -
剪绳子求最大乘积
给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。 思路n=N1+N2+…+Nm 求解 max(N1 x N2 x…x Nm). 根据算术几何均值不等式 (N1+…+Nm/m)>=(N1 x…x Nm)的1/a次方,当且仅当N1.原创 2021-06-17 10:59:05 · 235 阅读 · 1 评论 -
机器人的运动范围
地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?//分析://采用递归实现深度优先//1、能移动:左(i,j-1) 右(i,j+1) 上(i-.原创 2021-06-15 21:32:36 · 101 阅读 · 0 评论 -
矩阵中的路径
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。board 和 word 仅由大小写英文字母组成。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 分析 这是典型的矩阵搜索问题,可使用 深度优先搜索(DFS)+ 剪枝 来解决。深度优先搜索: 可以理解为暴力法遍历矩阵中所有字符串可能性。DFS .原创 2021-06-12 21:46:08 · 175 阅读 · 2 评论 -
青蛙跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。分析1跳0级只有一种跳法(为什么要原地托马斯旋转?)跳1级只有一种跳法。跳2级可以duang一级再duang一级,也可以一次duang两级。…跳3级,有111,12,21三种跳法。刚好等于1级的跳法加上2级的跳法。跳三级楼梯,不管如何跳,到了通往楼梯顶部的最后一跃都只有两种,要么一跃一级,.原创 2021-06-07 21:38:07 · 188 阅读 · 0 评论 -
斐波拉契数列
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。需要考虑时间复杂度,以及溢出的问题。所以不宜使用递归,而是采用迭代。public.原创 2021-06-04 22:01:05 · 149 阅读 · 0 评论 -
重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。找到根结点,然后分左右,递归。import java.util.Arrays;public class Solution { public TreeNode buildTree(int[] preorder, int[] inorder){ int n = preorder.length; //前序数组的长度 if (n == 0){ .原创 2021-06-03 21:21:28 · 80 阅读 · 0 评论 -
从尾到头打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]思路1:顺序遍历 逆序赋值放入数组。public class Solution { public int[] reversePrint(ListNode head){ //思路1 顺序遍历 但逆序赋值存在数组中 ListNode cur=head; int count=0; while(.原创 2021-06-02 22:18:01 · 66 阅读 · 0 评论 -
字符串替换空格
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.” 昏析一下最简单,最咸鱼,最快乐。直接用replace().public class Solution { public String replaceSpace(String s) { return s.replace(" ","%20"); }}2public class So.原创 2021-06-01 22:35:52 · 173 阅读 · 0 评论 -
二维数组中的查找
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数示例:现有矩阵 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。给定 .原创 2021-05-31 19:54:11 · 142 阅读 · 0 评论 -
数组中重复的数字
数组中重复的数字在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 简单昏析:暴力遍历,两两异或,异或值为0时满足(最笨)。public class Solution { public int findRepeatNum(int[] nums){ for原创 2021-05-30 22:17:00 · 117 阅读 · 0 评论 -
练习一些题
1、LC1550. 存在连续三个奇数的数组给你一个整数数组 arr,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 true ;否则,返回 false 。示例 1:输入:arr = [2,6,4,1] 输出:false 解释:不存在连续三个元素都是奇数的情况。示例 2:输入:arr = [1,2,34,3,4,5,7,23,12] 输出:true 解释:存在连续三个元素都是奇数的情况,即 [5,7,23]。class Solution { //方法一 :直接排除原创 2021-05-28 20:27:18 · 123 阅读 · 0 评论 -
Map和Set
1、Map和set是一种专门用来进行搜索的容器或者数据结构(适合动态查找),其搜索的效率与其具体的实例化子类有关。2、模型一般把搜索的数据称为关键字(Key),和关键字对应的称为值(Value),将其称之为Key-value的键 值对,所以模型会有两种:纯 key 模型,比如: 有一个英文词典,快速查找一个单词是否在词典中。 Key-Value 模型,比如: 统计文件中每个单词出现的次数,统计结果是每个单词都有与其对应的次数。3、Map中存储的就是key-value的键值对,Set中只存储了.原创 2021-05-27 19:40:44 · 89 阅读 · 0 评论 -
二叉搜索树
二叉搜索树又称二叉排序树。是空树或者具有以下性质的二叉树。1、若左子树不为空,则左子树上所有结点的值都小于根结点的值。2、若右子树不为空,则右子树上所有结点的值都大于根结点的值。3、它的左右子树也分别为二叉搜索树。public class BSTree { public Node root = null; // public void insert(int key) {//插入 if (root == null) { root =.原创 2021-05-19 20:26:29 · 84 阅读 · 0 评论 -
Java中的优先级队列练习
import java.util.Comparator;import java.util.PriorityQueue;import java.util.Queue;public class PriorityQueueDemo { static class IntegerComparator implements Comparator<Integer> { @Override public int compare(Integer o1, Intege原创 2021-05-15 21:30:36 · 109 阅读 · 0 评论 -
JZ000000
JZ000000000原创 2021-05-10 22:24:38 · 98 阅读 · 2 评论 -
(剑指offer/JZ6/JZ4/JZ2)旋转数组的最小数字/重建二叉树/替换空格
旋转数组的最小数字要求:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。示例:输入:[3,4,5,1,2]返回值:1思路:思路实现:public class Solution { public int minNumberInRotateArray(int [] array) { int low = 0 ; int hig..原创 2021-05-09 22:22:45 · 87 阅读 · 0 评论 -
(Java小练习)分糖果
要求:A,B,C三个人是好朋友,每个人手里都有一些糖果,我们不知道他们每个人手上具体有多少个糖果,但是我们知道以下的信息:A - B, B - C, A + B, B + C. 这四个数值.每个字母代表每个人所拥有的糖果数.现在需要通过这四个数值计算出每个人手里有多少个糖果,即A,B,C。这里保证最多只有一组整数A,B,C满足所有题设条件。示例:输入:1 -2 3 4输出:2 1 3思路:推出等式作为条件。实现:import java.util.Scanner;publi原创 2021-04-16 22:27:16 · 402 阅读 · 0 评论 -
(Java小练习)字符串中找出连续最长的字符串
要求:输入一个字符串,在一行内输出其最长的数字子串。若有多个最长的数字子串,则将它们全部输出(按原字符串的相对位置)。示例:输入:abcd12345ed125ss123456789输出:123456789思路:字符串中非数字元素替换为字母a,以a为间隔将其分割为数组,数组中最长的元素即为所求。实现:import java.util.Scanner;public class FindNum { public static void main(String[] args)原创 2021-04-15 20:55:06 · 1637 阅读 · 0 评论 -
(小练习)将一句话的单词进行倒置,标点不倒置。
要求:Hello world. 倒置 world. Hello实现:import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); String str=sc.nextLine(); String[] array=str.split(" ")原创 2021-04-14 21:31:06 · 187 阅读 · 0 评论 -
(代码练习)A+B(n)系列---java
1、A+B(1)输入包括两个正整数a,b(1 <= a, b <= 10^9),输入数据包括多组。输出a+b的结果import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); while (sc.hasNextInt()){ int a=sc.n原创 2021-04-12 21:25:23 · 292 阅读 · 0 评论 -
java实现二叉树遍历并以列表返回
1、前序的两种实现(1)import java.util.ArrayList;import java.util.List;public class preorder { List<Integer> list=new ArrayList<>(); public void preorder(TreeNode root){ if (root==null){ return; } list.ad原创 2021-04-10 22:06:42 · 234 阅读 · 0 评论 -
Java实现二叉树的遍历
开局一张糊糊的图 节点public class TreeNode { public int val;//节点值 public TreeNode left;//指向该节点的左孩子 null表示无左孩子 进一步视为左子树 public TreeNode right;//指向该节点的右孩子 public TreeNode(int val) { this.val = val; } @Override public String to原创 2021-04-07 17:29:29 · 96 阅读 · 2 评论 -
(小练习)实现一个最小栈/实现循环队列---数据结构
实现一个最小栈要求:设计一个支持 push ,pop ,top 操作,并能在常数时间内[O(1)]检索到最小元素的栈。思路:不能遍历,一遍历就是O(n)。利用两个栈,一个放入栈元素,另一个始终放最小元素。实现:import java.util.Stack;public class MinStack { public static void main(String[] args) { MinStack stack=new MinStack(); s..原创 2021-04-03 16:06:07 · 147 阅读 · 0 评论 -
(队列&栈)用队列实现栈/用栈实现队列---数据结构
用队列实现栈要求:仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通队列的全部四种操作(push、top、pop 和 empty)说明:(1)只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 这些操作。(2)所使用的语言也许不支持队列,可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。思路:操作前始终保持一个队列是空的。相互来回“倒腾”,以此达到模..原创 2021-04-02 20:42:53 · 121 阅读 · 0 评论 -
(Java中的双向链表)实现自己的LinkedList---数据结构
要求:实现MyLinkedList,实现LinkedList中的一些方法。实现:原创 2021-03-31 20:30:39 · 134 阅读 · 0 评论 -
Java中的链表LinkedList
public class LinkedList implements List{ public LinkedList(){...}}1、LinkedList的具备的方法,等同于List具备的方法。2、Java中的链表,不再使用头结点来代表链表,而是定义了一个链表类来表示链表。3、Java中的链表采用的是一种双向链表。4、Java中的链表既保存了链表的头结点,也保存了链表的尾结点。常用方法:import java.util.LinkedList;publi..原创 2021-03-28 22:02:50 · 125 阅读 · 0 评论 -
(链表练习)相交链表---数据结构
要求:找到两个单链表相交的起始节点。注意:这里相交结点的值为8,为什么不是1呢?因为所谓结点相交,需要满足结点相等(指向同一对象),而不只是结点值相等。思路:以相交后的长度相等为基准,做比较。实现:public class getIntersectionNode { public static void main(String[] args) { ListNode head1=new ListNode(4); ListNode n2=new ListN原创 2021-03-26 10:43:12 · 84 阅读 · 0 评论 -
(链表练习)链表的回文结构---数据结构
要求:对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。测试样例:1->2->2->1返回:true实现:public class Partition { public static ListNode partition(ListNode pHead, int x) { ListNode lastA = n原创 2021-03-24 20:26:49 · 66 阅读 · 0 评论