随笔分类 -  算法题

摘要:package main import "fmt" /* 给出一个整数数组,请在数组中找出两个加起来等于目标值的数, 你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于index2.。注意:下标是从1开始的 假设给出的数组中只存在唯一解 例 阅读全文
posted @ 2021-04-15 10:16 威威后花园 阅读(66) 评论(0) 推荐(0)
摘要:package main import "fmt" /* 分别按照二叉树先序,中序和后序打印所有的节点。 输入 {1,2,3} 输出 [[1,2,3],[2,1,3],[2,3,1]] */ type TreeNode struct { Val int Left *TreeNode Right *T 阅读全文
posted @ 2021-04-15 09:41 威威后花园 阅读(92) 评论(0) 推荐(0)
摘要:""" 按概率抽样 [0.1, 0.5, 0.4] 给出这个概率数组,对每个概率打上label 0 - 0.1 1 - 0.5 2 - 0.4 求按照上述比例,获取相应概率的label """ import random import logging import bisect logging.ba 阅读全文
posted @ 2020-11-05 09:54 威威后花园 阅读(356) 评论(0) 推荐(0)
摘要:递归实现 void midSearchTree(TreeNode *root){ if(root != NULL){ midSearchTree(root->left); cout << root->val << endl; midSearchTree(root->right); } } int m 阅读全文
posted @ 2020-11-04 17:27 威威后花园 阅读(133) 评论(0) 推荐(0)
摘要:思路 二分查找变种 // 旋转数组的最小数 int getMinNum(vector<int> &nums){ int left = 0; int right = nums.size() -1; while(left <= right){ int mid = left + (right - left 阅读全文
posted @ 2020-11-04 17:10 威威后花园 阅读(126) 评论(0) 推荐(0)
摘要:动态规划思路分析 使用一维数组表示,dp[i] 代表以下标为i结尾的子序列,其中上升的个数。 初始化 dp[i] = 1 转移方程: dp[i] = max(dp[i], dp[j] + 1) # 0 <= j <i 返回值 返回dp[size] 数组中元素最大的值 // 最长上升子序列 int l 阅读全文
posted @ 2020-11-03 14:10 威威后花园 阅读(80) 评论(0) 推荐(0)
摘要:// 链表求和 ListNode *addTwoList(ListNode *p, ListNode *q){ ListNode *pCur = p; ListNode *qCur = q; ListNode *head = new ListNode(-1); ListNode *ret = hea 阅读全文
posted @ 2020-11-02 14:28 威威后花园 阅读(105) 评论(0) 推荐(0)
摘要:// 遍历字符串,使用set集合记录走过的字符// 字符串不含重复字符的最长子串 int longChirldStr(string s){ set<char> tmpSet; int ret = 0; int right = 0; int size = s.length(); if(size ==0 阅读全文
posted @ 2020-11-02 09:30 威威后花园 阅读(86) 评论(0) 推荐(0)
摘要:实现字符串逆序反转 // 反转字符串 // 方法一 string reverse_str(string str1){ int i=0; int j = str1.length() - 1; while(i < j){ swap(str1[i], str1[j]); i++; j--; } retur 阅读全文
posted @ 2020-10-30 17:19 威威后花园 阅读(131) 评论(0) 推荐(0)
摘要:递归过程 https://www.bilibili.com/video/BV1Nt411K75B?from=search&seid=3890139359243729354 class TreeNode(object): def __init__(self, x): self.left = None 阅读全文
posted @ 2020-10-28 15:45 威威后花园 阅读(217) 评论(0) 推荐(0)
摘要:思路 1. 一圈圈的打印,开始点为左上角(0,0) 1. 第一圈:(0,0) 2. 第二圈:(1,1) 3. 第N圈:(n,n) 2. 总共可以打印多少圈,n为行与列的一半,超出就终止 python实现 def print_one_circle(array_input, rows, cols, st 阅读全文
posted @ 2020-10-28 14:19 威威后花园 阅读(157) 评论(0) 推荐(0)
摘要:给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。 示例 1:给定的树 s: 3 / \ 4 5 / \ 1 2给定的树 t: 4 / \ 1 2返回 true,因为 t 与 阅读全文
posted @ 2020-10-26 22:19 威威后花园 阅读(119) 评论(0) 推荐(0)
摘要:// 求a b 两个字符串的编辑距离 // a b // 0 1 // a 0 // b 1 // c 2 int calTwoStr(string a, string b){ int aSize = a.length(); int bSize = b.length(); int dp[bSize] 阅读全文
posted @ 2020-10-25 21:52 威威后花园 阅读(229) 评论(0) 推荐(0)
摘要:# 求根号2 def solution(): # 初始化x x = 2 # 目标函数fx fx = x**2 - 2 # 优化求解fx while fx > 0.001: x = x - (fx * 1.0 / (2*x)) fx = x**2 - 2 return x 1. 使用牛顿迭代法,关键代 阅读全文
posted @ 2020-10-22 09:37 威威后花园 阅读(429) 评论(0) 推荐(0)
摘要:思路一:非递归方法 1. 找到两个节点的路径的逆序链表,将题转换成两个链表第一个公共节点的问题。 1.2 两个链表求第一个公共节点 class Solution { public: ListNode *getIntersectionNode(ListNode *headA, ListNode *he 阅读全文
posted @ 2020-10-21 22:42 威威后花园 阅读(196) 评论(0) 推荐(0)
摘要:方法1 使用优先队列,时间复杂度为,kn * log k // 合并K个已经排序的链表并将其作为一个已排序的链表返回,分析并描述其复杂度 class Solution{ public: struct cmp{ bool operator() (const ListNode *a, const Lis 阅读全文
posted @ 2020-10-16 09:38 威威后花园 阅读(178) 评论(0) 推荐(0)
摘要:使用堆排序 大顶堆解决最小前K的问题 小顶堆解决最大前K的问题 c++中使用优先队列priority_queue构造堆,支持以下操作 1. empty() : 如果优先队列为空,返回真 2. pop() : 删除第一个元素 3. push() : 加入一个元素 4. size() : 返回优先队列中 阅读全文
posted @ 2020-10-10 10:18 威威后花园 阅读(225) 评论(0) 推荐(0)
摘要:暴力滑块方法 1. 初始定义两个指针,start、end 都指向字符串开头 2. end向前走一步,就轮循检查end位置字符是否在start,end区间出现过,如果出现就将start更新为出现位置+1 3. 定义全局变量length,结果ret,ret = max(ret, length),这样找到 阅读全文
posted @ 2020-09-07 14:21 威威后花园 阅读(144) 评论(0) 推荐(0)
摘要:动态规划方法求解 代码实现c++版 class Solution { public: int countSubstrings(string s) { int size = s.length(); int count = 0; vector<vector<int> > dp(size, vector< 阅读全文
posted @ 2020-09-06 18:29 威威后花园 阅读(414) 评论(0) 推荐(0)
摘要:本题使用动态规划的思想,创建一维数组dp(n) 1. 初始化与源数组相同,即将原数组进行拷贝 2. 状态转移方程是:如果dp[i-1] > 0 then dp[i] = dp[i-1] + nums[i] 否则 保持dp[i]值不变 3. 求取dp中的最大值,即为最大子序和 代码如下 class S 阅读全文
posted @ 2020-09-03 14:18 威威后花园 阅读(144) 评论(0) 推荐(0)