算法题
cleverlemon
hello world !
展开
-
剑指offer45 :把数组排成最小的数 C语言
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出来的所有数字中最小的一个。例如,输入数组{3,32,321},则打印出来能排列的最小数字是321323.思路1:最直观的方法就是求出这个数组中所有的排列方式,然后依次比较找到最小的那个。但n个数字总共有n!个排列,效率比较低。思路2:对数组进行重排。找到一个排序规则,每次用两个数进行比较,有两种方法,第一个数在前或第一个数在后,如果第一种情况的排法大于第二种,则进行交换。顺序打印最终数组的元素,即为最小。但要考虑0不能放在第一个位置原创 2020-09-16 11:25:36 · 997 阅读 · 0 评论 -
力扣--91解码方法 c++ 动态规划实现
解码方法一条包含字母A-Z的消息通过以下方式进行了编码:‘A’ -> 1‘B’ -> 2‘C’ -> 3…‘Z’ -> 26给定一个只包含数字的非空字符串。请计算解码方法的总数。示例1:输入:“12”输出:2解释:它可以解码为"AB"(1 2) 或者 “L”(12)。示例2:输入:“226”输出:3解释:它可以解码为"BZ" (2 26),“VF” (22 6),或者 “BBF”(2 2 6)。思想:dp[i]为译码方法总数;s[0]原创 2020-09-04 13:24:34 · 193 阅读 · 0 评论 -
合并两个有序链表 c语言 递归与非递归
将两个升序链表合并成一个升序链表,新链表是给定两个链表的节点组成的递归struct ListNode { int val; struct ListNode *next;};struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){ if(NULL==l1) return l2; if(NULL==l2) return l1; if(l1->val<=l2-原创 2020-08-15 21:36:16 · 569 阅读 · 1 评论 -
c语言判断二叉树是否镜像对称 递归
力扣题----判断二叉树是否为镜像对称的。思路:p指向root的左孩子,q指向root的右孩子。判断p和q的值是否相等,相等则递归判断p的左孩子和q的右孩子是否相等,p的右孩子和q的左孩子是否相等,相等则继续递归下去。当p和q都为空时,说明整个二叉树都已经遍历完毕且遍历过程中p和q的值一直相等,则返回true。给定二叉树的结构如下:struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right;原创 2020-08-14 19:10:39 · 1073 阅读 · 0 评论 -
c语言判断是否为回文数
$emsp;给定一个数,它的逆序输出的值等于它本身,则称为回文数,例如:12321、5665、0~9都属于回文数。方法一:逆序输出后与原值比较是否相等,注意用int来保存逆序值可能会超出整形范围bool isPalindrome(int x){ if(x<0) return false; double rx=0; int xx=x; while(x) { rx=rx*10+x%10; x/=10; } re原创 2020-08-14 18:23:20 · 6194 阅读 · 0 评论 -
c语言股票问题--买股票的最佳时机(一笔交易 或 尽可能多次交易)
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。ascdvfgint maxProfit2(int* prices, int pricesSize){ if (NULL == prices || pricesSize <= 1) return 0; //申请一个priceSize行两列的二维数组 int** dp = (原创 2020-07-25 08:48:44 · 2075 阅读 · 0 评论 -
c语言判断序列是否为BST树的后续遍历序列
bool VerifySquenceOfBST(int* arr, int len)//判断序列是否为BST树的后序遍历序列{ if (NULL == arr || len <= 0) return false; int root = arr[len - 1]; int i = 0; for (i; i < len - 1; ++i)//左子树的节点都小于root ,大于root的为右子树,先break掉 { if (root <原创 2020-07-23 09:46:14 · 152 阅读 · 0 评论 -
替换字符串中的空格c语言
实现一个函数,把字符串中的每个空格替换成“%20”.例如:输入“We are happy.”,则输出“We%20are%20happy.” 若从头到尾扫描字符串,每次遇到一个空格替换时,都需要将后面的字符都后移两位,总的时间复杂度为O(n^2). 为减少时间复杂度,可以先遍历一遍计算出总的空格数,则替换空格后的字符串总长度等于原来的长度加上2乘空格数。p2指向替换后的字符串尾部,p1指向原字符串尾部,从后向前遍历。总的时间复杂度为O(n)。...原创 2020-07-22 21:31:59 · 1164 阅读 · 0 评论 -
旋转数组的最小数字c语言
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1. 解:顺序遍历一次数组找最小值是最简单的方法,但效率太低。由于数组是有序的,可以采用二分查找的方式。int InOrderMin(int* arr, int left, int right)//顺序查找{ int res=arr[left]; for (int i = lef原创 2020-07-18 16:59:26 · 191 阅读 · 0 评论 -
leetcode--分发糖果问题
老师想给孩子们分发糖果,有N个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果: 每个孩子至少分配到1个糖果。 相邻的孩子中,评分高的孩子必须获得更多的糖果。 那么这样下来,老师至少需要准备多少颗糖果呢?代码如下:#include<iostream>#include<vector>using namespace std;int fappen(vector<int> &ve原创 2020-07-18 16:29:41 · 377 阅读 · 0 评论