数据结构与算法
数据结构和算法用于优化时空复杂度,可以更好地处理实际遇到的问题嘞
米咔米苏的零食
这个作者很懒,什么都没留下…
展开
-
leetcode:set-matrix-zeroes(Java实现)
题目描述给定一个m*n的矩阵,如果有一个元素是0,就把该元素所在的行和列上的元素全置为0,要求使用原地算法。拓展:你的算法有使用额外的空间吗?一种比较直接的算法是利用O(m,n)的空间,但是这不是一个好的解法使用简单的改进可以在O(m+n)的空间解决这个问题,但是还不是最佳的解法你能在常量级的空间复杂度内解决这个问题吗?思路:设置一个辅助数组fuzu[][],长度和宽度和原数组一样。并将所有元素初始化为0,逐行逐列依个扫描matrix数组,若有元素为0则将相同位置的辅助数组.原创 2020-07-12 09:19:16 · 169 阅读 · 0 评论 -
LeetCode:LC67 remove-duplicates-from-sorted-list
题目描述给出一个排好序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。例如:给出的链表为1->2->3->3->4->4->5, 返回1->2->5.给出的链表为1->1->1->2->3,返回2->3.输入{1,2,2}输出{1}程序流程:首先根据前插法输入值建立链表,然后在deleteDuplicates函数中处理后返回新链表的队首指针,再依次输出新链..原创 2020-07-11 11:47:44 · 157 阅读 · 0 评论 -
LeetCodeLC88:unique-paths(java实现)
题目描述一个机器人在m×n大小的地图的左上角(起点,下图中的标记“start"的位置)。机器人每次向下或向右移动。机器人要到达地图的右下角。(终点,下图中的标记“Finish"的位置)。可以有多少种不同的路径从起点走到终点?上图是3×7大小的地图,有多少不同的路径?备注:m和n小于等于100示例1输入2,1输出1示例2输入2,2输出2思路:典型的简单DP题。采用递推实现,使用二维数组ways[][]中的每一个元素表示该点到终点的.原创 2020-07-10 08:45:08 · 195 阅读 · 0 评论 -
leetcodeLC102:rotate-image(Java实现)
题目描述给出一个用二维矩阵表示的图像返回该图像顺时针旋转90度的结果扩展:你能使用原地算法解决这个问题么?思路:1、获取矩阵的行数和列数,比如m行n列的矩阵顺时针旋转90度后就变成n行m列。2、创建一个新数组other存放旋转后的数据。原矩阵按行按列依次扫描,把握住原矩阵和翻转后的矩阵对应关系是:other[j][row-i-1]=matrix[i][j]3、最后将other中的元素依次赋值到matrix即可。注意:原地算法要求改变原来的matrix,我本想通..原创 2020-07-09 10:51:05 · 170 阅读 · 0 评论 -
Leetcode 11 container-with-most-water(Java实现)
题目描述给定n个非负整数a1,a2,…,an,其中每个数字表示坐标(i, ai)处的一个点。以(i,ai)和(i,0)(i=1,2,3...n)为端点画出n条直线。你可以从中选择两条线与x轴一起构成一个容器,最大的容器能装多少水?注意:你不能倾斜容器例如:输入 [1,8,6,2,5,4,8,3,7]输出: 49示例1输入[1,8,6,2,5,4,8,3,7]输出49思路:容器的高度是两个ai中较小的那个,简单遍历找最大值即可,max表示最大的容器容量。m.原创 2020-07-08 10:11:20 · 218 阅读 · 0 评论 -
马拦过河卒(C++)
棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。棋盘用坐标表示,A点(0, 0)、B点(n,m),同样马的位置坐标是需要给出的。现在要求你计算出卒从A点能够到达B点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步...原创 2020-04-05 20:49:17 · 1570 阅读 · 0 评论 -
Java大整数类快速实现高精度加减乘除
在求高精度方面Java相比C++和C而言有一个最大的好处就是有大整数类。因此避免了繁琐的手撸高精,快速简单。输入格式:输入有三行,第一行a,第二行一个算术运算符(+,-,*,/),第三行b。(0≤a,b≤10^2000)样例:BigInteger的常用方法:BigInteger a = new BigInteger("99999999999999999999999");/...原创 2020-04-03 09:44:16 · 552 阅读 · 0 评论 -
高精度乘法(C++和Java实现)
解法还是属于偏暴力枚举的那种 ‘\0’ ‘\0’ 1 1 1 ‘\0’ 1 1 1 ‘\0’ 1 1 1 ‘...原创 2020-04-02 11:02:44 · 448 阅读 · 0 评论 -
正整数 n 分解成若干个互不相同的自然数的和,且使这些自然数的乘积最大
题目描述一个正整数一般可以分为几个互不相同的自然数的和,如3=1+2,4=1+3 4=1+3,5=1+4=2+3,6=1+5=2+4。现在你的任务是将指定的正整数n分解成若干个互不相同的自然数的和,且使这些自然数的乘积最大。输入格式只一个正整数n,(3<=n<=90)输出格式第一行是分解方案,相邻的数之间用一个空格分开,并且按由小到大的顺序。第二行是...原创 2020-03-28 22:43:19 · 7727 阅读 · 2 评论 -
高精度减法(c++)
输入格式两个整数a,b(第二个可能比第一个大)。输出格式结果(是负数要输出负号)。因为"笨",所以是常规思路,不花里胡哨,通俗易懂。#include<iostream>using namespace std;void fun(char *a,char *b,int lena,int lenb){int en[10000000];//en数组存最后答案...原创 2020-03-27 20:24:54 · 794 阅读 · 0 评论 -
动态规划初步(硬币问题)
问题描述:现有面值为3,4,5的三种硬币(每种硬币可以重复使用),现在去商店买一个东西要X元,问如何用最少的硬币付清,而不需要对方找钱,如果无法用手中的硬币恰好凑出X则打印-1.样例:输入: 1 2 3 6输出:-1-1 1 2分析:有一个很直觉的思路就是先尽量用大的硬币,然后用小的硬币,举个栗子:这个题中13元可以分解为先用一个5元,再用一个5元,此时发现再...原创 2020-03-21 22:48:38 · 357 阅读 · 0 评论 -
高精度加法算法模板(C语言)
#include<stdio.h>void fun(char *a,int lena,char *b,int lenb){ int i,j,k,lenc;int c[500]; i=j=k=lenc=0; i=(lena>=lenb?lenb:lena)-1;//i为长度较短的字符数组的长度-1 j=(lena>=lenb?lena:l...原创 2020-03-16 08:05:22 · 508 阅读 · 0 评论 -
利用哈夫曼树和优先队列求解带权路径长度
带权路径长度 任务描述 给定N个权值作为N个叶子结点,构造哈夫曼树,求其带权路径长度输入输入由多组数据组成。每组数据分成两行。第一行仅一个整数n(2<=n<=100000)。第二行有n个空格分开的权值,值范围在[1,1000000000]之间。输出对于每组测试数据,输出一行,即其对应哈夫曼树的带权路径长度对1000000007取模。样例输入...原创 2019-06-28 18:04:35 · 1030 阅读 · 0 评论