- 博客(79)
- 资源 (14)
- 收藏
- 关注
原创 Thymeleaf学习记录
历史JSP 在 JavaWeb 的世界中统治了很长一段时间。但是,由于血统不纯正,表现一般般,许多技术跃跃欲试,欲取代其统治地位。jsp缺点jsp 标签和 html 标签混在一起,生成的文档比较混乱在 web 浏览器或者 html 编辑器中查看未经渲染的 jsp 页面和预想差别很大jsp 和 servlet 紧耦合,只能用在基于 Servlet 的 web 项目中 Th...
2018-06-26 16:31:29 303
原创 k数和
思路这道题感觉是一个非常好的动态规划的题目,动态规划方程:d[i][j][target]=d[i−1][j][target]+d[i−1][j−1][target−a[i]]d[i][j][target]=d[i−1][j][target]+d[i−1][j−1][target−a[i]]d[i][j][target] = d[i-1][j][target] + d[i-1][j-1][tar...
2018-06-07 22:17:40 434
原创 53. 翻转字符串
思路首先翻转字符串整体,然后对于每个单词进行翻转,两次翻转的函数使用同一个函数。翻转函数的思路:使用队列将String转成char[],然后反过来存储(下面就是使用的这种方法)用两个指针,进行前后字符的对换代码 public static String reverseWords(String s) { if (s.length() <= 1)...
2018-06-05 14:45:31 238
原创 50. 数组剔除元素后的乘积
思路这道题使用的是分治法, result[i] = left[i-1] + right[i+1];下面使用巧妙的实现代码public static List<Long> productExcludeItself(List<Integer> nums) { Long temp = Long.parseLong("1"); ...
2018-06-02 10:58:24 220
原创 落单的数 II
思路:整体的一个思路就是对 n 个数所有的位求和,然后 在对每一个位上的 sum mod 3 ,这样就能够把单独的那个数字找出来代码:public int singleNumberII(int[] A) { int result = 0; for (int i = 0; i < 32; i++) { int coun...
2018-04-20 23:11:13 140
原创 最小子串覆盖
思路这道题 lintcode 上面描述的不完整,应该是找到的子串同时满足开始 index 和 length最小核心思想就是使用两个数组 sCount 和 tCount 来记录已经出现的字符的个数,同时使用一个变量 count 已经符合 target 中字母的个数同时一个经典之处是, 使用 while 循环缩小窗口的左边界 代码 public static Strin...
2018-04-03 11:06:01 169
原创 搜索二维矩阵 II
思路其实总的思想就是二分查找,但是其中的一个技巧是当查找不到的时候返回 right 值,这时间的 right 值指向值的特性是 a[right] < target其次需要注意的是一定要处理好 边界条件 和特殊的 测试值代码 public static int searchMatrix(int[][] matrix, int target) { if ...
2018-04-02 17:21:39 147
原创 全组合
思路使用递归的方式,实现全组合。使用的公式 C(m, n) = C(m-1, n-1) + C(m, n-1);代码public void recursion(int index, int count, String str) { //对 begin - end 之间的数字进行全组合 if (count == 0) { list.add...
2018-03-12 15:12:37 206
原创 三数之和
思路感觉这道题自己的思路还是比较low的,感觉在效率上一点都不高。没想到居然通过了(0.0)。 简单记录下这道题使用了两个小知识: 首先是降低复杂度,首先对于(i, j)和(j, i)是 不允许出现的。所以在for 循环中使用 j < i 避免这种情况; 其次,结果中一定还存在重复元,这时候使用 set 来去除重复元。对于找到的三个数 a+ b + c = 0; 首先将 abc 进行排序,然
2018-02-06 14:36:12 1053
原创 最长上升子序列
思路这道题考察的是 动态规划 , 这道题的思路和最大子段和是一样的,曾经都写过最长上升子序列,动态规划的方程 可以见参考代码 public int longestIncreasingSubsequence(int[] nums) { int[] len = new int[nums.length]; if (nums.leng
2018-01-30 15:45:10 180
原创 主元素 II
思路本题主要考察的是map数组的使用,唯一的小技巧是在往map中添加元素的时候,时刻的判断着 某个元素的数量是否超过总数的的 1/3代码public int majorityNumber(List nums) { Map hash = new HashMap(); Integer temp, count; for (int i =
2018-01-30 09:44:18 131
原创 散点图
代码画直线#我们通常引入的是分模块pyplot ,大部分的功能都在这个包中import matplotlib.pyplot as plt import numpy as npx = np.linspace(-1, 1, 50) #指定的间隔内,返回均匀产生的数字 y = 2 * x + 1plt.figure()plt.plot(x, y)plt.show()
2018-01-17 22:59:04 1957
原创 恢复旋转排序数组
思路这道题应该首先计算出来 每个数字到其 原位置 移动的距离。但是有一个陷阱是,当使用程序移动的 时候,有时间遇见 1, 3, 5 只是在几个数之间交换的情形(死循环),所以要保证程序能够跳的出来。代码public void recoverRotatedSortedArray(List nums) { int temp = nums.get(0);
2018-01-15 21:27:23 144
原创 翻转链表
思想其实就是设置两个指针 pointer1, pointer2 。同步的移动pointer1, pointer2 ,head 这3个指针。这 3 个指针的前后顺序刚好是pointer1, pointer2 ,head。这道题应该注意的是while循环的判断条件: pointer2 != null代码 public ListNode reverse(ListNode hea
2018-01-15 19:37:46 137
原创 数组划分
思路这道题没什么考察点,主要是要注意两个for循环,一定要加上pos1 < pos2 防止越界。同时,注意题中最后的要求,如果都比k小,则返回数组的长度。代码public static int partitionArray(int[] nums, int k) { // write your code here int pos1 = 0;
2017-12-29 10:53:40 165
原创 插入区间
思路这道题本来以为没什么问题的,但是,真正实现起来,还是感到有点乱。这道题的收获: ArrayList是有序的list中有add(pos, object)方法,就是在指定位置处插入元素代码public List<Interval> insert(List<Interval> intervals, Interval newInterval) { List<Interval> l
2017-12-29 10:28:09 290
原创 交叉字符串
思路这道题开始考察了尝试了两个思路,这道题不能简单的从相同的字母的个数是否相等下手。应该要想到字幕出现的顺序。最后使用了递归,但是一直感觉代码的效率不高代码 String s1; String s2; String s3; String s4; public Boolean flag = false; public boolean isInterle
2017-12-28 22:56:59 218
原创 平面列表
思路这道题是比较简单的题,简单的考察下递归的使用代码 private List<Integer> list = new ArrayList<Integer>(); // @param nestedList a list of NestedInteger // @return a list of integer public List<Integer> flatten(Li
2017-12-26 15:10:04 208
原创 子集
思路这道题的思路很直观,其实任何 2 个数字的全组合都是可以使用类似于00, 01, 10, 11来标志。那么自己维护一个二进制的数组,然后实现遍历输出即可。感觉这道题考察了java的 comparable 和 comparator接口,两个接口的介绍见参考1自己实现了一下,虽然通过了,但是代码不优雅,所以参考了网上别人写的,实现如下:代码自己动手实现时候写的二进制运算,先记录下来:s
2017-12-26 11:34:08 186
原创 带重复元素的排列
思路这道题感觉考察就是全排列,只是存储的时候使用Set存储,就能防止重复元素做完本题的感悟是:一定要掌握好java的容器,同时感觉自己对于容器的遍历掌握的不好代码static List<List<Integer>> list = new LinkedList<List<Integer>>(); static Set<List<Integer>> set = new HashSet<Li
2017-12-22 20:13:15 331
原创 全排列
思路一直认为全排列是一个很经典的问题,从前都实现过一次,这次又做了一次。具体思路,下面链接注意的地方:在java中都是值传递,所以对于swap(a, b)函数的使用,一定要注意,在此处是需要改变数组的内容的,所以需要返回数组函数代码static List<List<Integer>> list = new LinkedList<List<Integer>>(); public List
2017-12-22 19:40:06 234
原创 二分查找
思路二分查找的变形,主要的难点在于不仅要找到目标元素,并且要找到下标最小的。可以按照二分查找找到等于目标元素的下标,然后往前遍历,直到找到最小的下标。这里需要注意的是:当找到0下标的元素时候,不能往前面迭代了,因为会导致数组越界代码 public static int binarySearch(int[] nums, int target) { int begin = 0
2017-12-22 18:56:24 118
原创 排序
排序始终是个绕不过去的问题 0.0归并排序思路步骤 划分问题: 把序列分成元素个数尽量相等的两半递归求解:把两半元素分别排序合并问题:把连个有序表合并成一个算法的时间复杂度: O(nlogn) (这个我还没理解)注意在上图中,比如说当序列变成A[i]:38,49,65,97B[j]:13,27,76 A[i]: 38,49,65,97 B[j] :13 ,27,76
2017-12-20 14:52:29 127
原创 丑数 II
思路我们可以首先写出前几个丑数作为种子,比如 array = [1, 2, 3, 4, 5],这是前5个丑数,我们如何确定第6个呢? 第六个丑数,一定是 value2=min(array[i]∗2),value3=min(array[i]∗3),value5=min(array[i]∗5)value2=min(array[i] *2), value3=min(array[i] * 3),value
2017-12-20 12:02:42 147
原创 A + B 问题
基础java运算符: ^: 异或运算符&: 与运算符~:运算符|: 运算符思想对于 5 + 3 来说: 5的二进制是:a = 101 ; 3 二进制是 b = 011我们可以通过下面的方法得到:101 ^ 011 = 110(101 & 011) << 1 = 010110 ^ 010 = 100(110 & 010) <<1 = 100100 ^ 100 = 000
2017-12-20 11:48:32 443
原创 python小知识
#!/usr/bin/python 作用:指定解释器的位置、python中默认的编码是ASCII编码,在没有改变编码格式的时候,无法打印汉字。在文件的第一行,或者第二行加入下面的说明:#coding:utf-8
2017-12-16 10:42:37 193
原创 c++中的常用语法
知识点long long , long , int 的长度: 32位系统:int(4个字节) long(4个字节) long long(8个字节)64位系统:int(4个字节) long (8个字节) long long(8个字节)推荐的声明数组的方法: const int maxn = 100 + 10;int A[maxn];c++中有bool类型,但是c中没有 -
2017-12-12 23:03:06 262
原创 最长上升子序列问题(LIS)
问题方法状态转移方程: 需要注意的是: 当完全逆序的情况下,每个 dp(i) = 1代码#include<iostream>using namespace std;int data[] = {1,6,2,3,7,5};int record[6];int max(int a, int b) { return a > b? a:b;}int main() { int l
2017-12-12 16:57:44 229
原创 无关元素
唯一分解定理算术基本定理,又称为正整数的唯一分解定理,即:每个大于1的自然数均可写为质数的积,而且这些素因子按大小排列之后,写法仅有一种方式。(这个定理真的是有趣)问题知识补充:C(k, n) = (n - k +1) / k * C(k-1, n);思路首先将m利用 分解唯一定理 分解成 质数指数的连乘形式, 然后对于补充知识的公式,从C(1 , n) 算起,一次检测是否 C(k, n
2017-12-07 23:24:54 253
原创 扩展欧几里德算法
遇见这道题,对求最大公约数又有了新的认识欧几里得问题int gcd(int a, int b) { if (b == 0) return a; else return gcd(b, a%b);}扩展欧几里得问题对于ax + by = c; 在 c % gcd(a,b) = 0的时候,我们一般先求 a/gcd(a,b) x + b/gcd(
2017-12-07 21:25:22 131
原创 数字三角形问题
问题描述状态转移方程代码实现方法1:效率低下#include<iostream> #include<string.h>#define maxn 1000 + 5using namespace std;int a[maxn][maxn];int d[maxn][maxn];int n;int D (int i, int j) { return a[i][j] + (i ==
2017-12-07 11:00:59 201
原创 全组合(高效)
使用以为运算符生成全组合(很经典):package com.set.test;public class SetTest { public static void main(String[] args) { String str[] = { "A", "B", "C", "D", "E" }; int nCnt = str.length; int nB
2017-12-07 09:12:49 161
原创 第8章 多态
最近编程时候,遇见了一个问题,当时怎么都想不通。最后,谁知是多态。所以要静心研究下多态。面向对象的三大特征: 封装 继承 多态多态通过分离 做什么 和 怎么做 ,从另外的一个角度将接口和实现分离开来。封装通过合并特征和行为来创建新的数据类型。“实现隐藏”则是通过将细节“私有化”把接口和实现分离开。多态的作用是消除类型之间的耦合关系。多态也叫作动态绑定,后期绑定,运行时绑定。 -首先是一个
2017-11-28 14:49:42 163
原创 第5章 初始化与清理
java中通过使用构造器,类的设计者可以确保每个请注意由于构造器的名称必须和类名完全相同,所以,每个方法首写字母小写的编码风格并不适用于构造器。java中的初始化与创建是绑在一起的,两者不能分离。相同的词表达的是不同的含义,这叫做:重载区分重载的方法是:每个重载的方法都要有独一无二的参数类型的列表甚至参数顺序的不同也足以区分两个方法,但是一般不建议这么做。默认构造器是没有形式参数的,它的
2017-11-24 11:04:59 132
原创 第13章 字符串
不可变的String:String对象是不可变的,String类每一个看起来会修改String值的方法,都是创建了全新的对象。而最初的String是丝毫未动的。String q = "howdy";String qq = upcase(q);print(q); //howdyprint(qq);//HOWDYString对象只有只读特性,所以指向它的任何的引用都不可能改变它的值,因此,也就
2017-11-04 22:01:10 184
易学 c++ 潘嘉杰
2015-03-14
数据结构 严蔚敏 代码
2015-03-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人