- 浏览: 184461 次
- 性别:
- 来自: 北京
-
最新评论
-
小黄牛:
基于支付系统真实场景的分布式事务解决方案效果演示:http:/ ...
spring 7 种分布式事务实现 -
blue2048:
看看两个实例的端口要不一样,另外,看看日志提示有没有错误
elasticsearch 单机部署 集群 -
mtsw2011:
我改了# Set the bind address speci ...
elasticsearch 单机部署 集群
文章列表
1) 没有查询条件,或者查询条件没有建立索引
2) 在查询条件上没有使用引导列
3) 查询的数量是大表的大部分,应该是30%以上。
4) 索引本身失效
5) 查询条件使用函数在索引列上,或者对索引列进行运算,运算包括(+,- ...
什么是回溯法?
回溯法的通用框架
利用回溯法解决问题
问题1:求一个集合的所有子集
问题2:输出不重复数字的全排列
问题3:求解数独——剪枝的示范
问题4:给定字符串,生成其字母的全排列
问题5:求一个n元集合的k元子集
问题6:电话号码生成字符串
问题7:一摞烙饼的排序
问题8:8皇后问题
总结与探讨
附:《算法设计手册》第7章其余面试题解答
跟word break 相比,该题需要输入具体的方案
步骤如下
1. 使用map,存储第k个位置之前的字符串,所有的单词划分方案
2. 修剪分支,将一些不符合完全划分的单词除去
3. 遍历,获得所有符合条件的方案
public class Solution {
public List<String> wordBreak(String s, Set<String> dict) {
Map<Integer, List<Integer>> pMapALL = new HashMap<Integ ...
dp解决方案,状态转移方程
f[i]代表字符串第i位能否被分割
f[i]=(f[j]&&s.substring(j+1,i+1))||(f[j]&&s.substring(j+2,i+1))||...
public class Solution {
public boolean wordBreak(String s, Set<String> dict) {
boolean[] f = new boolean[s.length()];
for(int i =0; i<s.leng ...
1、问题描述
已知:有一个容量为V的背包和N件物品,第i件物品的重量是weight[i],收益是cost[i]。
条件:每种物品都有无限件,能放多少就放多少。
问题:在不超过背包容量的情况下,最多能获得多少价值或收益
举例:物品个数N = 3,背包容量为V = 5,则背包可以装下的最大价值为40.
----------------------------------------------
步骤:
1. 选中Java项目工程名称,在菜单中选择 File->project structure... (快捷键Ctrl+Alt+Shift+S)。
2. 在弹出的窗口中左侧选中"Artifacts",点击"+"选择jar,然后选择"from modules with dependencies"。
3. 在配置窗口中配置"Main Class"。
很多网上的算法指根据结论倒推出a=c这样的结论,是错误的!
这道题比较注重数学推到,
如图,设置快慢两个指针,快指针的速度是慢指针的两倍
假设两个指针在z点相遇,那么快指针所走过的距离是慢指针的两倍
那么有以下公式,其中n代表快指针在环内转了n圈后行走b距离与慢指针相遇
2*(a+b)= a + b + n*(b+c) ====> a = (n-1)(b+c) + c
由这个推到结果可以知道,a的长度为n-1个环的长度加上c的长度
那么得出结论,相遇后,慢指针从链表头重新开始,快指针的速度和满指针一样继续前行,必然会在Y点相遇,相遇时快指针可能已经沿环转了多圈
...
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public boolean hasCycle(ListNode head) {
if(head == null){
...
注意以下几点
1. 传入为空
由于题目要求比较宽泛,所以采用以下两种方式解答
1. 用空间降低复杂度,使用list存储,借助数组编号寻址,重组链表
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solutio ...
注意以下几点
1. 输入为null时,返回空list,题目没有说
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<Integer> preorderTraversal(TreeNode ro ...
注意以下几项
1. 输入若为NULL,返回空列表,而不是NULL,题目没有说清楚
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<Integer> postorderTraversal(Tr ...
注意一下几项
1. 借助linklist动态储存key的使用情况,将每次使用的key对应的节点变化到链表尾部,0位置为最少使用的key
2. 题目对时间复杂度有要求,linklist获得某个key,需要用O(1)的map查找,而是O(n)的循环查找
3. 根据以上两个条件,需要实现map+linklist的数据结构,linklist存储键值和最少用到的key,map根据key找到list对应的节点
public class LRUCache {
private Map<Integer, Node> map;
private ...
注意以下几项
1. 题目没有说按从小打到排序
2. 排序的时候需要判断前驱为空,后继为空的情况
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListN ...
注意一下几项
1. nlogn时间复杂度,稳定的算法是堆排序和归并排序
2. 常数地址空间,堆排序不合适,考虑归并排序的变种
3. 注意链表查找中间节点的小算法
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class ...
注意以下项
1. 空字符串也是回文
public class Solution {
public boolean isPalindrome(String s) {
if(s.equals("")){
return true;
}
s = s.toLowerCase();
StringBuilder clearStr = new StringBuilder();
for(int i=0; i<s.length(); i++){
...