![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
xiaomagezuishuai
这个作者很懒,什么都没留下…
展开
-
环形链表问题
判断链表中是否有环。用快慢指针的原因,快指针速度为2的原因,因为如果有环的话,一定会相遇,快指针的速度为2,一定会相遇。假设有环的情况下,满指针到达成环的入口时,快指针的位置距离入环节点距离为s。相遇时,快、慢指针走的次数为t,距离入环节点的距离为:s+kt慢指针距离入环节点的距离:ts+kt-t=nR。 t=(nR-s)/k-1 ,如果k等于2时,则t一定能整除,t一定是个整数 public boolean hasCycle(ListNode head) { .原创 2021-10-25 13:26:24 · 140 阅读 · 0 评论 -
循环不变式二分法理解
循环不变式用于理解和证明算法的正确性。实际上,循环不变式并不是狭义上的一个式子,而是一个在命题,一个在算法的起始状态、运行过程中和算法结束时始终保持为真的一个命题。通过下文中的例子可以更加清晰的认识到循环不变式的意义,下面是循环不变式的三条性质:初始化:循环的第一次迭代之前,它为真。保持:如果循环的某次迭代之前它为真,那么下次迭代之前它仍为真。终止:在循环终止时,不变式为我们提供一个有用的性质,该性质有助于证明算法时正确的。注意:循环不变式的前两条性质类似于数学归纳法,证明了一个基本情况和一个归纳原创 2021-09-22 13:06:58 · 150 阅读 · 0 评论 -
两数之和
两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。思路:hash表import java.util.Map;import java.util.HashMap;class Solution { public int[] twoSum(int[] nums, int target) {原创 2021-03-27 09:56:39 · 90 阅读 · 0 评论 -
二叉树的下一节点
二叉树的下一节点/*public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLinkNode next = null; TreeLinkNode(int val) { this.val = val; }}*/public class Solution { public TreeLinkNode G原创 2021-03-15 18:04:44 · 80 阅读 · 0 评论 -
字符串中第一个出现的不重复的数
字符串中第一个出现的不重复的数public class Solution { //Insert one char from stringstream int[] arr = new int[128]; //记录次数 StringBuilder sb = new StringBuilder();//记录位置 public void Insert(char ch) { sb.append(ch); arr[ch]++; } /原创 2021-03-15 17:14:59 · 110 阅读 · 0 评论 -
扑克牌顺子
扑克牌顺子class Solution { public boolean isStraight(int[] nums) { Set<Integer> repeat = new HashSet<>(); int max = 0, min = 14; for(int num : nums) { if(num == 0) continue; // 跳过大小王 max = Math.ma原创 2021-03-15 16:48:33 · 87 阅读 · 0 评论 -
两个链表对应数字相加
两个链表对应数字相加/** * 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 = ne原创 2021-03-14 10:03:47 · 88 阅读 · 0 评论 -
有序旋转数组查找
有序旋转数组查找class Solution { public int search(int[] nums, int target) { int n = nums.length; if (n == 0) { return -1; } if (n == 1) { return nums[0] == target ? 0 : -1; } int l = 0,原创 2021-03-11 22:51:21 · 116 阅读 · 0 评论 -
回文数
回文数class Solution { public boolean isPalindrome(int x) { // 特殊情况: // 如上所述,当 x < 0 时,x 不是回文数。 // 同样地,如果数字的最后一位是 0,为了使该数字为回文, // 则其第一位数字也应该是 0 // 只有 0 满足这一属性 if (x < 0 || (x % 10 == 0 && x !=原创 2021-03-11 13:55:24 · 90 阅读 · 0 评论 -
最长公共前缀
最长公共前缀class Solution { public String longestCommonPrefix(String[] strs) { if (strs == null || strs.length == 0) { return ""; } else { return longestCommonPrefix(strs, 0, strs.length - 1); } } pu原创 2021-03-10 13:02:39 · 77 阅读 · 0 评论 -
快乐数
快乐数class Solution { private int getNext(int n) { int totalSum = 0; while (n > 0) { int d = n % 10; n = n / 10; totalSum += d * d; } return totalSum; } public boolean isHap原创 2021-03-10 12:55:21 · 88 阅读 · 0 评论 -
集合子集
标题集合子集思路针对针对cur的元素有两种办法一种是取,一种是不取。t.add() t.remove(), 继续递归。class Solution { List<Integer> t = new ArrayList<Integer>(); List<List<Integer>> ans = new ArrayList<List<Integer>>(); public List<List&原创 2021-03-10 09:58:29 · 81 阅读 · 0 评论 -
比较版本号
比较版本号class Solution { public int compareVersion(String version1, String version2) { String[] nums1 = version1.split("\\."); String[] nums2 = version2.split("\\."); int n1 = nums1.length, n2 = nums2.length; // compare versions int i1原创 2021-03-10 08:37:28 · 81 阅读 · 0 评论 -
最少跳跃数(跳跃游戏II)
最少跳跃数(II)给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。public int jump(int[] nums) { int position = nums.length - 1; //要找的位置 int steps = 0; while (position != 0) { //是否到了第 0 个位置 for (int i = 0; i < p原创 2021-03-10 08:02:28 · 419 阅读 · 0 评论 -
删除链表重复元素
删除链表重复元素题目1. 保留一个重复元素/** * 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; t原创 2021-03-09 16:29:22 · 59 阅读 · 0 评论 -
字符串ip地址组合
字符串ip地址组合思路:dfs思路package com.dfs;import java.util.ArrayList;public class StringIP { public static final int segment_count = 4; public ArrayList<String> arrayList = new ArrayList<>(); public int[] segments = new int[segment_cou原创 2021-03-09 15:51:55 · 496 阅读 · 0 评论 -
删除链表的中间节点
删除链表的中间节点删除链表的中间节点public static LinkNode removeHalfNode(LinkNode node) { if(node==null || node.next==null) { return node; } if (node.next.next==null) { return node.next; } LinkNode fast = node.next.next; LinkNode slow = node; //重点slow指的原创 2021-03-06 15:51:44 · 114 阅读 · 0 评论 -
最短通路值
最短通路值package com.juzhen;import java.util.LinkedList;import java.util.Queue;//最短通路值public class ShortestPath { public static void main(String[] args) { int[][] array = {{1,0,1,1,1},{1,0,1,0,1},{1,1,1,0,1},{1,1,1,1,1}}; System.out.print(shortestP原创 2021-03-06 15:43:49 · 194 阅读 · 2 评论 -
子数组最大和
子数组最大和public static int MostSumOfZixulieMethod(int[] arrays) { if(arrays==null || arrays.length==0) { return 0; } int subsum = 0; int maxsum = Integer.MIN_VALUE; for(int i=0; i<arrays.length; i++) { if(subsum<0) { subsum = arrays原创 2021-03-06 15:13:57 · 78 阅读 · 0 评论 -
换线方法数
换线方法数public static int numbersOfMethodVersionTwoOfPress(int money, int[] chargeMoney) { if (money<0 || chargeMoney==null || chargeMoney.length==0) { return 0; } int[] result= new int[money+1]; //初始化只是用一种货币的情况, result[0][0]=1;原创 2021-03-06 15:09:14 · 92 阅读 · 0 评论 -
换钱所需要的最少钱币个数
换钱所需要的最少钱币个数public static int mostlessMoneyNumerMethodOfPress(int money, int[] chargeMoney) { if(money<0||chargeMoney==null||chargeMoney.length==0) { return 0; } //result[0...i][0] 为0 int[] result = new int[money+1]; for(int j=1;j<=mone原创 2021-03-06 14:56:39 · 100 阅读 · 0 评论 -
最长公共子序列
最长公共子序列package com.dynamic;//最长公共子序列public class MostLenthCommonSubXulie { //1A2C3D4B56 public static void main(String[] args) { String string1 = "1A2C3D4B56"; String string2 = "B1D23CA45B6A"; char[] arr1 = string1.toCharArray(); char[] arr原创 2021-03-06 14:45:07 · 91 阅读 · 1 评论 -
最长回文子串
最长回文子串public static String longestSubStringHuiWen(char[] stringarray, String s) { if (stringarray==null || stringarray.length == 0) { return ""; } boolean[][] dp = new boolean[stringarray.length][stringarray.length]; int len = stringarray.lengt原创 2021-03-06 14:38:03 · 79 阅读 · 0 评论 -
最长递增子序列
最长递增子序列package com.dynamic;//最长递增子序列不连续public class MostLengthDiZengSubXulie { public static void main(String[] args) { int[] arr = {2,5,1,4,3,6,7}; int[] result = dp(arr); result = generateLIS(arr, result); for(int i=0;i<result.length;i原创 2021-03-06 14:24:51 · 90 阅读 · 1 评论 -
最长公共子串
最长公共子串package com.dynamic;public class MostLengthCommonSubString { public static void main(String[] args) { String string1 = "12345ABCD"; String string2 = "12345EF"; System.out.print(MostLengthCommonSubStringMethod(string1, string2)); } publi原创 2021-03-06 14:02:45 · 52 阅读 · 0 评论 -
路径总和判断是否存在到叶子结点相加等于某值
路径总和判断是否存在到叶子结点相加等于某值/** * 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原创 2021-03-06 11:08:13 · 98 阅读 · 0 评论 -
路径总和求出所有路径到叶子节点
路径总和求出所有路径到叶子节点给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。class Solution { List<List<Integer>> arrays = new ArrayList<List<Integer>>(); public List<List<Integer>> pathSum(原创 2021-03-06 10:58:40 · 260 阅读 · 0 评论 -
二叉树路径等于某个值的路径个数
二叉树路径总和个数给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left;原创 2021-03-06 10:47:21 · 440 阅读 · 0 评论 -
单词搜索
矩阵包含字符串class Solution { public boolean result=false; public boolean exist(char[][] board, String word) { int[][] visited = new int[board.length][board[0].length]; char[] a = word.toCharArray(); for(int i=0;i<board.length原创 2021-03-06 11:20:24 · 91 阅读 · 0 评论 -
a的b次幂
a的b次幂public static float method(int a, int b) { float res = 0.0f; if(b==0) { return 1; } if(b<0) { res = 1/method(a, -b); return res; } if(b%2==0) { res = method(a*a, b/2); return res; }else { res = method(a*a, b/2)*a;原创 2021-03-03 23:39:06 · 467 阅读 · 1 评论 -
大数相加
大数相加public static String bigNumberSum(String number1, String number2) { String num1 = new StringBuffer(number1).reverse().toString(); String num2 = new StringBuffer(number2).reverse().toString(); int num1Length = num1.length(); int num2Length = nu原创 2021-03-03 23:37:27 · 139 阅读 · 1 评论 -
两数相加
两数相加public class TwoNumberAdd { public static void main(String[] args) { int number1 = 10; int number2 = 12; while (number2!=0){ int temp = number1^number2;//no jinwei number2 = (number1&number2)<原创 2021-03-03 14:39:21 · 96 阅读 · 1 评论 -
进制转换
进制转换package com.special;import com.sun.xml.internal.ws.encoding.MtomCodec;//mpublic class NumberMToNJinzhi { public static void main(String[] args) { int m =1000; int n = 5; System.out.println(MToN(-1000, 5)); } public s原创 2021-03-03 14:33:39 · 70 阅读 · 1 评论 -
合并二叉树
合并二叉树import java.util.*; /* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */ public class Solution { /** * * @param t1 TreeNode类 * @param t2 TreeNode类 * @return TreeNo原创 2021-03-03 14:29:15 · 74 阅读 · 1 评论 -
最大数
最大数import java.util.*;public class Solution { /** * 最大数 * @param nums int整型一维数组 * @return string字符串 */ public String solve (int[] nums) { // write code here ArrayList<String> list = new ArrayList<St原创 2021-03-03 14:28:08 · 103 阅读 · 1 评论 -
最长递增路径
最长递增路径import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 递增路径的最大长度 * @param matrix int整型二维数组 描述矩阵的每个数 * @return int整型 */ public int maxLength; public int solve (int[][] matrix) {原创 2021-03-03 12:14:43 · 108 阅读 · 1 评论 -
链表的奇偶重排
链表的奇偶重排public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param head ListNode类 * @return ListNode类 */ public ListNode oddEvenList (ListNode head) { // write code here if(head==null||h原创 2021-03-03 10:49:10 · 263 阅读 · 0 评论 -
字符串排列
字符串排列class Solution { List<String> res = new LinkedList<>(); char[] c; public String[] permutation(String s) { c = s.toCharArray(); dfs(0); return res.toArray(new String[res.size()]); } void dfs(int原创 2021-02-28 08:13:42 · 79 阅读 · 0 评论 -
x的平方根(二分查找实现)
x的平方根(二分查找实现)class Solution { public int mySqrt(int x) { int l = 0, r = x, ans = -1; while (l <= r) { int mid = (l + r)/ 2; if ((long) mid * mid <= x) { ans = mid; l = mid +原创 2021-02-28 00:10:06 · 105 阅读 · 0 评论 -
数组中未出现的最小正整数
数组中未出现的最小正整数import java.util.*;public class Solution { /** * return the min number * @param arr int整型一维数组 the array * @return int整型 */ public int minNumberdisappered (int[] arr) { // write code here int n = a原创 2021-02-27 23:45:43 · 80 阅读 · 0 评论