四时宝库

程序员的知识宝库

第五十五天-树形问题,SQL(树形结构sql语句查询)

学习笔记:

1.每个关系数据库管理系统都存在以下类型的数据完整性:实体完整性?表中没有重复行。域完整性?通过限制值的类型、格式或范围来强制执行给定列的有效条目。引用完整性?不能删除其他记录使用的行。用户定义的完整性?强制执行一些不属于实体、域或引用完整性的特定业务规则。

2.数据库规范化是在数据库中有效地组织数据的过程。这个规范化过程有两个原因:消除冗余数据,例如,将相同的数据存储在多个表中。 确保数据依赖关系是有意义的。

3.SELECT - 从数据库中提取数据

UPDATE - 更新数据库中的数据

DELETE - 从数据库中删除数据

INSERT INTO - 向数据库中插入新数据

CREATE DATABASE - 创建新数据库

ALTER DATABASE - 修改数据库

CREATE TABLE - 创建新表

ALTER TABLE - 变更(改变)数据库表

DROP TABLE - 删除表

CREATE INDEX - 创建索引(搜索键)

DROP INDEX - 删除索引

4.SELECT语句与ORDER BY

SELECT column_name() FROM table_name ORDER BY column_name() ASC or DESC

5.SELECT COUNT(计数)子句

SELECT COUNT(column_name) FROM table_name WHERE CONDITION;

6.SELECT与HAVING子句

SELECT SUM(column_name) FROM table_name WHERE CONDITION GROUP BY column_name HAVING (arithematic function condition);

7.SELECT DISTINCT语法用于仅返回不同的(different)值。SELECT DISTINCT column1, column2, ... FROM table_name;

8.结合AND,OR和NOT

SELECT * FROM Customers WHERE NOT Country='Germany' AND NOT Country='USA';

9.从"Customers" 表中选择所有客户,按 "Country" 升序排列,并按 "CustomerName" 列降序排列: SELECT * FROM Customers ORDER BY Country ASC, CustomerName DESC;

10.横向渗透攻击技术是复杂网络攻击中广泛使用的一种技术,特别是在高级持续威胁(Advanced Persistent Threats,APT)中更加热衷于使用这种攻击方法。攻击者可以利用这些技术,以被攻陷的系统为跳板,访问其他主机,获取包括邮箱、共享文件夹或者凭证信息在内的敏感资源。攻击者可以利用这些敏感信息,进一步控制其他系统、提升权限或窃取更多有价值的凭证。借助此类攻击,攻击者最终可能获取域控的访问权限,完全控制基于Windows系统的基础设施或与业务相关的关键账户。

11.39. 组合总和

给你一个 无重复元素的整数数组 candidates 和一个目标整数target ,找出 candidates 中可以使数字和为目标数 target 的 所有不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。

candidates 中的同一个数字可以无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。

对于给定的输入,保证和为 target 的不同组合数少于 150 个。

输入:candidates = [2,3,6,7], target = 7

输出:[[2,2,3],[7]]

解释:

2 和 3 可以形成一组候选,2 + 2 + 3 = 7 。注意 2 可以使用多次。

7 也是一个候选, 7 = 7 。

仅有这两种组合。


解题思路:遍历每一个元素,对每一个元素使用当前元素递归,这样可以得到能够无限重复的所有情况,每一次递归都减去当前元素的值,直到target等于0,就可以将结果添加到结果集里。当target小于0或者index的长度大于数组时,就可以剪枝。

class Solution {
    List<List<Integer>> res = new ArrayList<List<Integer>>();
    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        List<Integer> list = new ArrayList<Integer>();
        backTacking(candidates, 0, list, target);
        return res;
    }
    public void backTacking(int[] candidates, int index, List<Integer> list, int target){
        if(target<0 || index>=candidates.length){
            return;
        }
        if(target==0){
            res.add(new ArrayList<Integer>(list));
        }
        for(int i=index; i<candidates.length; i++){
            list.add(candidates[i]);
            backTacking(candidates, i, list, target-candidates[i]);
            list.remove(list.size()-1);
        }
    }
}

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接