
数据结构与算法
1024276449
这个作者很懒,什么都没留下…
展开
-
数据结构与算法-2的幂
描述:给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。思路:如果我们的数是2的整数其二进制为1后面n个0 所以我们可以将n和其n-1进行于操作 如果最后的结果为0 则为true 否则为false代码:class Solution { public boolean isPowerOfTwo(int n) { return n>0 &am原创 2021-05-30 22:43:45 · 136 阅读 · 1 评论 -
数据结构与算法-戳气球
描述:有n个气球,编号为0到n-1,每个气球上都标有一个数字,这些数字存在数组nums中。现在要求戳破所有气球,戳破第i个气球可以获得其旁边两位数跟自己的乘积,如果为边界则超出的部分为1;代码:候就把他从list中给删除。来看下代码 public int maxCoins(int[] nums) { List<Integer> list = new LinkedList<>(); //先把nums数组中的元素放到list中 for (int n原创 2021-05-24 21:35:23 · 119 阅读 · 0 评论 -
数据结构与算法-二叉搜索树的第k大节点
二叉搜索树的第k大节点因为二叉搜索树的分布是左子树小于根节点 右子树大于根节点,根据这个原理我们对我们的二叉搜索树进行中序遍历,遍历过后的结果就是我们的按照升序排好序的数组,因为我们题目中要求的是返回第K大的节点,所以我们可以逆序遍历,先遍历我们的右节点在根节点,最后左节点。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * Tr原创 2021-05-13 22:15:35 · 117 阅读 · 0 评论 -
数据结构与算法-找到缺失的整数
一个长度为n的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围1~n之内。在范围1~n内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。思路:根据题目可知因为是递增的我们可以求其1~n的和在依次减去数组中数据;public int missingNumber(int[] nums) { int n = nums[nums.length-1]; int result = n *(n + 1 ) /2; for(int i=0;i<n原创 2021-05-09 20:59:32 · 175 阅读 · 0 评论 -
数据结构与算法-找到环的入口
package linkedlist;public class LinkedList { public static Node isCycle(Node head){ Node p1 = head; Node p2 = head; while (p2 != null && p2.next != null){ p1 = p1.next; p2 = p2.next.next; if (p1 == p2){ Node index1 = p2;原创 2021-05-05 21:32:38 · 143 阅读 · 0 评论 -
数据结构与算法-合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4 public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode head = new ListNode(0); ListNode temp = head; while(l1原创 2021-05-03 23:08:51 · 151 阅读 · 0 评论 -
数据结构与算法-判断是否有环
package linkedlist;public class LinkedList { public static boolean isCycle(Node head){ Node p1 = head; Node p2 = head; while (p2 != null && p2.next != null){ p1 = p1.next; p2 = p2.next.next; if (p1 == p2){ return true; }原创 2021-05-01 22:06:27 · 147 阅读 · 0 评论 -
数据结构与算法-输出链表倒数第n个元素
输入一个int类型数值n返回链表的倒数第n个元素值public static HeroNode serch(HeroList head,int n){ //首先判断传入的n是否合法既n的值是否小于list的长度 int size = head.size; HeroList temp = head; if (size < n){ return null; } //合法后判断我们的需要遍历的次数为(size - n) for(int i=0;i<size-n;i+原创 2021-04-30 22:31:14 · 303 阅读 · 1 评论 -
如何在不使用递归的情况下遍历一颗二叉树
面试的时候,往往面试官会强制你写出非递归的版本,网上关于非递归版本的介绍也有很多,这里我分享一个自己认为是比较好记的版本。显然,我们需要用一个stack来模拟递归时的函数调用。对于三种遍历,我们都使用push当前节点->push左子树->pop左子树->push右子树->pop右子树的方式。但是cout时机会有所不同。对于前序遍历来说,每次访问到一个节点就cout;对于中序遍历来说,每次将右子节点进栈时,把当前节点cout;对于后序遍历来说,每次pop的时候cout。使用工原创 2021-04-25 09:52:20 · 341 阅读 · 0 评论 -
数据结构与算法-反转链表
代码实现public TreeNode invertTree(TreeNode root) { if (root == null) { return null; } TreeNode right = invertTree(root.right); TreeNode left = invertTree(root.left); root.left = right; root.right = left; return root;}.原创 2021-04-21 21:34:21 · 61 阅读 · 0 评论 -
数据结构与算法-二叉树的三种遍历方式
package tree;public class BinaryTreeDemo { public static void main(String[] args) { //创建二叉树 BinaryTree binaryTree = new BinaryTree(); HeroNode songjiang = new HeroNode(1, "songjiang"); HeroNode wuyong = new HeroNode(2, "wuyong"); HeroNode luji原创 2021-04-11 14:34:21 · 126 阅读 · 0 评论 -
数据结构与算法-排序(归并排序)
归并排序先将元素进行拆分,将两组数分别进行比较插入一个临时数组中,最后在合并输出,总合并步骤为数组元素的个数-1package sort;import java.util.Arrays;public class MergeSort { public static void merge(int []nums ,int left ,int right ,int []temp){ if (left < right){ int mid = (left + right)/2; /原创 2021-04-10 21:35:57 · 75 阅读 · 0 评论 -
数据结构与算法-动态规划(最长回文子串)
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"class Solution { public String longestPalindrome(String s) { String result = ""; boolean table[][] = new boolean[原创 2021-04-08 21:27:08 · 116 阅读 · 1 评论 -
数据结构与算法-排序(快排)
快排快排:选择一个数使其该数左边为都是小于它的,使其该数右边为都是小于它的。这时我们可能并没有排好序还需在进行左递归和右递归;代码package sort;public class QuickSort { public static void quickSort(int []nums,int left,int right){ int l = left; //左下标 int r = right; //右下标 int pivot = nums[(l+r)/2]; //中间值 int原创 2021-04-06 22:13:02 · 82 阅读 · 2 评论 -
数据结构与算法-排序(希尔)
希尔排序int []nums = new int[]{0,6,9,4,7,3,5,2,1,8};希尔排序:是将数据分别按照数组长度的一半来进行分组,将每组的元素进行比较,将其组内排好序。代码package sort;import java.util.Arrays;public class ShellSort { public static void shellSort(int []nums) { int temp = 0; for (int gmp = nums.length/原创 2021-04-05 22:11:37 · 66 阅读 · 0 评论 -
数据结构与算法-排序(插入排序)
插入排序(时间复杂度O(N²))插入排序:将每个元素依次插入到一个已经有序的序列中代码package sort;import java.util.Arrays;public class InstertionSort { //每次向已经有序的数组内插入元素 public static void insertionSort(int []nums,int n,int x){ int i; for (i = n-1; i >=0 ; i--) { if (x<nums[原创 2021-04-04 21:29:14 · 67 阅读 · 0 评论 -
数据结构与算法-排序(简单选择排序)
简单选择排序(时间复杂度O(N²))代码package sort;import java.util.Arrays;public class SelectSort { public static void selectSort(int []nums){ for (int i = 0; i < nums.length - 1; i++) { int min = nums[i]; int minIndex = i; for (int j = i+1; j < n原创 2021-04-04 20:30:29 · 162 阅读 · 0 评论 -
数据结构与算法-二分查找
旋转数组的最小数字代码 public int minArray(int[] nums) { int i = 0, j = nums.length - 1; while (i < j) { int m = (i + j) / 2; if (nums[m] > nums[j]) i = m + 1; else if (nums[m] < nums[j]) j = m;原创 2021-04-03 22:05:51 · 72 阅读 · 0 评论 -
数据结构与算法-排序算法(冒泡)
冒泡排序代码package sort;public class BubbleSort { public static void buutSort(Integer[] nums){ int k = nums.length; for(int i=0;i<nums.length;i++){ for(int j = i+1;j<k;j++){ if(nums[j-1]>nums[j]){ int tmp= 0; tmp = nums[j-1];原创 2021-04-03 21:49:49 · 62 阅读 · 0 评论 -
数据结构与算法-8皇后问题(回溯)
8皇后问题代码package recursion;public class Queue8 { //定义一个max表示共有多少皇后 static int max = 8; static int count = 0; //定义数组array,保存皇后放置位置的结果,比如arr = {0,4,7,5,2,6,1,3} static int [] array = new int[max]; public static void main(String[] args) { check(0);原创 2021-04-03 19:43:50 · 136 阅读 · 0 评论 -
用两个栈实现队列
用两个栈实现队列 Stack<Integer> A = new Stack<Integer>(); Stack<Integer> B = new Stack<Integer>(); public void appendTail(int value) { A.push(value); } public int deleteHead() { if(!B.isEmpty()) return B.pop(); if(A.isEmpty())原创 2021-04-02 22:58:25 · 73 阅读 · 0 评论 -
数据结构与算法-中缀表达式转后缀表达式
中缀表达式转后缀表达式1.首先我们定义两个栈分别用来存储我们的运算符和数字2.我们依次遍历字符串如果是数字就入数字栈3.如果当前字符不是数字且运算符栈为空或栈顶元素为“(”就将其直接入栈4.如果当前字符比栈顶字符的优先级大则直接入栈5.否则将运算符栈的栈顶元素依次弹出存入数字栈中直达当前栈顶元素的优先级小于要入栈的运算符,运算符入栈6.如果要入栈的运算符为“)”则运算符栈一直弹出元素并添加到数字栈中直到弹出的栈顶元素为“(”则继续扫描代码public class Demo01 { pub原创 2021-04-02 22:53:54 · 144 阅读 · 0 评论 -
数据结构与算法-旋转字符串
旋转字符串解法一:暴力移位法初看此题,可能最先想到的方法是按照题目所要求的,把需要移动的字符一个一个地移动到字符串的尾部,如此我们可以实现一个函数LeftShiftOne(char* s, int n) ,以完成移动一个字符到字符串尾部的功能,代码如下所示:void LeftShiftOne(char* s, int n){ char t = s[0]; //保存第一个字符 for (int i = 1; i < n; i++) { s[i - 1]原创 2021-04-01 14:17:32 · 181 阅读 · 0 评论