0 解题步骤回溯法解题时通常包含3个步骤:1. 针对所给问题,定义问题的解空间;2. 确定易于搜索的解空间结构;3. 以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。对于问题的解空间结构通常以树或图的形式表示,常用的两类典型的解空间树是子集树和排列树。当所给的问题是从n个元素的集合S中找到S满足某种性质的子集时,相应的解空间树称为子集树。例如,n个物品的0-1背包问题所对应的解空间树是一棵子集树,这类...
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。题目思路本题就是按照建立二叉树的思路建立就行了。先序遍历的第一个是根节点,然后在中序遍历找到该根节点,以此为界,中序遍历的左边是它的左子树的中序遍历,同样地找到该左子树在先序遍历中对应的先序遍历顺序。对于右子树也是一样的方法。本体采用递归,递归就要先写出终止条件。Python代码这个题...
写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。请注意程序效率
这是2015阿里秋招的一个在线笔试题
实现方法很简单,遍历一遍二叉树,找出最大最小,一相减就可以求出最大的差值
之前在做题的时候居然写递归的方法求值,后面测试了一下,果然结果不对
只要是非递归的的方法遍历都可以很容易找出最大值最小值,效率也比较高,时间复杂度为O(n)。
下面是我用非...
1、单链表倒序 定义链表节点Nodepublicclass Node {privateint index;public Node next;public Node(NodeBuilder builder) {this.index = builder.getIndex();this.next = builder.getNext();}publicstatic NodeBuilder newBuilder() {returnnew NodeBuilder();}} Node建造器publicclass NodeBuilder {privateint index;private Node next;publicint getIndex() {return index;}public NodeBuilder setIndex(int index) {thi...
问题:一个整数数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度为O(n),空间复杂度为O(1)。分析:这是一个很新颖的关于位运算的题目。首先考虑这个问题的一个简单版本:一个整数数组里除了一个数字之外,其他的数字都出现两次,请写程序找出这个只出现一次的数字。这个问题的突破口在哪?题目中数组的性质是只有一个整数出现一次,其他的都出现两次。这样的话就使我们想到了...
题解位置 class Solution {public void rotate(int[] nums, int k) {int len = nums.length; // 数组长度k = k % len; // 简化一下k// 外循环int count = 0; // 计数器for (int start = 0; count < len; start ++) {int cur= start; // 当前位置 int curVal = nums[pre]; // 当前位置元素do {int next = (cur+ k) % len; // 要移动到的位置nextint tmp = nums[next]; // 记录next位置本来存...
1、来源:LeetCode78给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]
输出:
[[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]解决代码: 1class Solution:2def subsets(self, nums):3""" 4 :type nums: List[int]5 :rtype: List[List[int]]6""" 7 res=[[]]8for num in sorted(nums):9 res...
20. Valid Parentheses有效的括号解题思路将括号比较后者后,不同的入栈,相同的出栈,最后字符串遍历结束后栈为空则匹配成功。publicbool IsValid(string s) {//声明字典,括号匹配键值对Dictionary<char, char> dict = new Dictionary<char, char>();dict.Add(‘)‘, ‘(‘);dict.Add(‘]‘, ‘[‘);dict.Add(‘}‘, ‘{‘);Stack<char> stack = new Stack<char>();//遍历字符s,直到遍历s所有字符结束循环for (int i = 0; i < s...
一位C++小白的力扣刷题_成长记录_welcome to visit ^_^ 树和图_第4题:填充每个节点的下一个右侧节点指针题目描述:给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node {int val;Node *left;Node *right;Node *next;
}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为...
题目:数组 A 由 1000 万个随机正整数 (int) 组成,设计算法,给定整数 n,在 A 中找出 a 和 b,使其符合如下等式:n = a + b 解题思路: 1. 1000w个随机正整数占用空间大概38-40MB,并不是很大,但是仍需要考虑如果数量级继续增大的情况。最好找到不用把数组加载到内存的方法。2. 若n给定,则数组中大于n的数都没有用,有用的只是那些处于0和n之间的数字,所以1000w个数字其实可以缩减为长度为n的数组,但是n也可能比1000w大。这并...
1. Two Sum(https://oj.leetcode.com/problems/two-sum/)解题思路:解法一: 暴力,O(n2)时间复杂度,TLE解法二:利用hash, 记录下数组中每个值对应的下标,再遍历一遍数组,通过查看target-num[i]的值是否在map中来确定另一个数值。时间复杂度O(n)解法三:对num数组排序,O(nlog(n)), 然后左右夹逼O(n). 但这道题要求记录下标,故这个方法行不通。python代码如下: 1def twoSum(self, num, target):2 d = {}3 lenNum = le...
这是悦乐书的第228次更新,第240篇原创01 看题和准备今天介绍的是LeetCode算法题中Easy级别的第95题(顺位题号是438)。给定一个字符串s和一个非空字符串p,找到s中p的字谜的所有起始索引。字符串仅由小写英文字母组成,字符串s和p的长度不会大于20,100。输出顺序无关紧要。例如:输入:s:“cbaebabacd” p:“abc”
输出:[0,6]说明:
起始索引等于0的子字符串是“cba”,它是“abc”的字谜。
起始索引等于6的子字符串是“bac”,...
http://www.cnblogs.com/hlxs/archive/2014/06/06/3772333.html1:合并排序,将两个已经排序的数组合并成一个数组,其中一个数组能容下两个数组的所有元素;2:合并两个单链表;3:倒序打印一个单链表;4:给定一个单链表的头指针和一个指定节点的指针,在O(1)时间删除该节点;5:找到链表倒数第K个节点;6:反转单链表;7:通过两个栈实现一个队列;8:二分查找;9:快速排序;10:获得一个int型的数中二进制中的个数;11:输入一个数组,实现一个函数,...
/*
算法题:给你一个自然数N,求[6, N]之内的所有素数中,
两两之和为偶数的那些偶数。
*/#include <iostream>usingnamespacestd;
void Grial(int n)
{int *b = newint[n];int k = 0;b[k++] = 2;b[k++] = 3;b[k++] = 5;for (int i = 6; i < n; i++){int j;for (j = 0; j < (k+1) / 2 ;j++){if (i%b[j] == 0)break;}if(j == (k+1) / 2)b[k++] = i;}//已经找出了6-N的所有素数,那么要求和是这些素数之和的偶数//只需要冒泡遍历所有的...
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define STACK_INIT_SIZE 100
#define STACK_INCREAMENT 10
#pragma warning(disable:4996)//我用的vs2015,不加这句用scanf会报错(使用了unsafe的函数)typedef struct { //栈char *base;char *top;int stackSize;
} Stack;void initStack(Stack &stack) { //初始化栈stack.base = stack.top = (char *)malloc(sizeof(char) * STACK_INIT_SIZE);stack.stackSize = S...