算法题
文章平均质量分 69
u010867294
这个作者很懒,什么都没留下…
展开
-
算法题思路
1 双指针,适合单调增或单调减的题型如lc633,c=i*i+j*jpublic boolean judgeSquareSum(int c) { int i = 0, j = (int) Math.sqrt(c); while (i <= j) { int t = i * i + j * j; if (t == c) { return true; } else if (t < c) {原创 2020-12-10 10:46:57 · 149 阅读 · 0 评论 -
数组题解题思路
给定一个数组 A思路一:构造一个新的数组B,从前往后累加。即B[i] = A[0] + A[1] + ... + A[i],或B[i] = B[i - 1] + A[i] (i >= 1)可以用来求解求一个数组中最长子数组和为K的题。如leetcode 325,用一个map来代替B,达到O(n)的时间复杂度。...原创 2020-06-29 23:00:57 · 293 阅读 · 0 评论 -
蓄水池采样 Reservoir Sampling
# coding:utf8import random# 从n个数中采样k个数def reservoir_sampling(n, k): # 所有数据 pool = [i for i in range(n)] # 前k个数据 res = [i for i in range(k)] for i in range(k, n): v = ...原创 2019-12-17 16:47:04 · 180 阅读 · 0 评论 -
并查集详解
这个文章是几年前水acm的时候转的, 当时也不知道作者是谁, 要是有人知道的话说一下吧并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定。不分享出来真是对不起party了。(party:我靠,关我嘛事啊?我跟你很熟么?)来看一个实例,杭电1232畅通工程首先在地图上给你若干个城镇,这些城镇都可转载 2017-10-09 16:39:56 · 185 阅读 · 0 评论 -
大整数乘法 java实现
public static String multiply(String s1, String s2) { StringBuilder sb1 = new StringBuilder(s1); StringBuilder sb2 = new StringBuilder(s2); sb1.reverse(); sb2.reverse()原创 2017-08-22 16:47:00 · 1329 阅读 · 0 评论 -
leetcode 前缀树(trie树)
public class Trie { /** * Initialize your data structure here. */ boolean isword; HashMap next; public Trie() { isword = false; next = new HashMap(); }原创 2017-08-21 14:53:55 · 510 阅读 · 0 评论 -
LeetCode 450.Delete Node in a BST
public static class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } public TreeNode findLeftMax(TreeNode root) {原创 2017-05-08 19:28:55 · 223 阅读 · 0 评论 -
二叉树非递归遍历
public static class TreeNode {int val = 0;TreeNode left = null;TreeNode right = null;public TreeNode(int val) {this.val = val;}}/** 1 2 3 4 5 6 null 7* */public static原创 2017-03-16 13:13:55 · 273 阅读 · 0 评论 -
常用排序算法稳定性、时间复杂度分析
1、 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法, 冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。2、研究排序算法的稳定性有何意义? 首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前两个相等的数据其在序列中的先后位置顺序与排序后它们两个先后位置顺序相同。再简单具体一点,如果A i == A j,Ai 原转载 2017-04-06 14:06:31 · 226 阅读 · 0 评论 -
重建二叉树-剑指offer
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 public class TreeNode { int val; TreeNode left; TreeNode right;原创 2017-04-13 20:44:44 · 178 阅读 · 0 评论 -
归并排序 java实现
public class Main { public static void merge(int[] a, int l1, int r1, int l2, int r2) { int[] tp = new int[r2 - l1 + 1]; int i = 0; int tpl1 = l1, tpl2 = l2; while (tpl1 <= r1 && tpl2 <= r2)原创 2017-04-04 21:19:36 · 177 阅读 · 0 评论 -
堆排序 java实现
public static void main(String[] args) { int [] a ={2,3,2,33,45,21,45,754,23,4,17,9}; System.out.println("before:"); for(int i :a ) System.out.print(i+" "); heapsort(a); System.out.println()原创 2016-03-27 20:34:25 · 282 阅读 · 0 评论 -
快速排序 Java实现-数组-链表
数组实现public static void quicksort(int[] a,int l,int r){if(lint i=l,j=r;int temp=a[i];while(iwhile(i=temp){j--;}if(ia[i++]=a[j];}while(ii++;}if(ia[j--]=a[i];}}a[i]=原创 2016-04-05 14:59:51 · 1405 阅读 · 0 评论