算法
wilhuang
C++、golang、js/ts
展开
-
【动态规划】国王与金矿
国王与金矿有一个国家发现了5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人数也不同。参与挖矿工人的总数是10人。每座金矿要么全挖,要么不挖,不能派出一半人挖取一半金矿。要求用程序求解出,要想得到尽可能多的黄金,应该选择挖取哪几座金矿?(其实就是经典的背包问题,当然这个问题是来微信公众号-程序员小灰的,当然内容都是有自己思考的,他的文章中代码部分有部分错误)500金/5人 400金/5人 200金/3人 300金/4人 350金/3人最简单的思路还是暴力,先找出可以挖...原创 2020-05-15 14:09:12 · 423 阅读 · 1 评论 -
【动态规划】走楼梯问题
走楼梯问题问题:有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶。一共有多少种走法。(和铺瓷砖问题是一样的)暴力枚举很简单,先选择可能性,再根据排列组合公式,记录。但是显然阶乘是可能溢出的,且其时间复杂度为O(n^2)(这里加上了求阶乘的复杂度)int N = 10; int M[2] = {1,2}; int sum = 0; for (int i = 0; i <= 10/M[0]; ++i) { if ((..原创 2020-05-15 14:08:17 · 1534 阅读 · 0 评论 -
【动态规划】谷歌鸡蛋问题
这是我面试时遇到的一个问题,后来了解到它是谷歌的一道面试算法题问题:已知两个鸡蛋硬度相同,100层楼。鸡蛋从f层楼房扔下时,可能会破碎。为找出使鸡蛋破碎不破碎的最高楼层f(0<f<=100),需要做x次实验,求x的最小值。扩展问题:M个鸡蛋,N层楼房首先最简单的穷举,从一楼丢,直到f层显然这是一个笨办法,也没有用上第二个鸡蛋,x可能等于100再想到二分法仔细想想其实这是一个有序序列中找到特定值的问题,于是我们从50层楼开始抛,但...原创 2020-05-15 14:04:21 · 355 阅读 · 0 评论 -
鸡尾酒排序真的好吗?
#include <iostream>#include <vector>#include <ctime>#define THOUSAND 1000using namespace std;// 常规冒泡,逐步把最大的放在尾端void sortByBubbing1_0(vector<int> &arr){ int size = arr.size(); // 1_0的优化,加入了isChange参数 bool i.原创 2020-05-15 13:59:12 · 174 阅读 · 0 评论 -
有序数组变乱序
需求:将一个长度为n的有序数组变为一个随机乱序数组(答案在文末)方法一://伪代码 for (int i = 0;i < n; ++i){ srand((unsigned)time(NULL)); swap(arr[i],arr[rand()%n]);}问题:1、产生了n^2方种情况,显然不是排列组合中n!的整数倍,所以这种乱序方法是有问题的如果不理解,我们下面进行实践 srand((unsigned)time(NULL)); .原创 2020-05-15 13:56:42 · 831 阅读 · 0 评论