数据结构与算法
bluewelkin
这个作者很懒,什么都没留下…
展开
-
不使用 + 运算符实现求两个整数a和b的和
class Solution { public int getSum(int a, int b) { if (b == 0) return a; return getSum(a^b,(a&b)<<1); }}//leetcode submit region end(Prohibit modification and deletion)}参考文章:https://blog.csdn.net/W..原创 2021-03-12 18:39:26 · 221 阅读 · 0 评论 -
leetcode刷题:367.有效的完全平方数(Java)
1、方法一,循环法class Solution { public boolean isPerfectSquare(int num) { if(num == 1) return true; for(int i = 0;i<=num/2+1;i++){ if (i*i == num) { return true; } } return false原创 2021-03-12 18:01:31 · 84 阅读 · 0 评论 -
斐波那契数列 (JAVA实现)
public static int Fab(int n){ if (n == 0) { return 0; } if(n == 1) { return 1; } return Fab(n-1)+Fab(n-2); }解题思路二:从下往上计算,使用循环(递归重复计算太多)。 public static int Fab2(int n){ ...原创 2021-03-08 12:52:20 · 172 阅读 · 0 评论 -
java 两个大数相加
public class BigDecimalAdd { public static void main(String[] args) { System.out.println("----------"); // 341234325 String a = "34199939"; String b = "413299999"; System.out.println("计算结果:" + addLargeNumber(a,..原创 2021-03-08 11:40:37 · 258 阅读 · 0 评论 -
二分查找
875class Solution { public int minEatingSpeed(int[] piles, int H) { int l = 1, r = Arrays.stream(piles).max().getAsInt(); while (l < r) { int mid = l + (r - l) / 2; if (eatingTime(piles, mid) <= H)原创 2020-10-05 20:48:53 · 66 阅读 · 0 评论 -
链表
1、反转一个链表206原创 2020-10-04 16:03:56 · 74 阅读 · 0 评论 -
链表1-1 1-2
package com.tx.LinkedList;public class LinkedList<E> { private class Node { public E e; public Node next; public Node(E e, Node node){ this.e = e; this.next = next ; } public N.原创 2020-09-26 10:02:46 · 137 阅读 · 0 评论 -
表、图
表#include #include typedef struct node *LIST; typedef struct node *position;/* node,节点 */struct node { int element; position next;};LIST init_list(void);void print_list(LIST);voi原创 2016-01-30 13:10:42 · 407 阅读 · 0 评论 -
最短路径
第一步 状态已知距离上游A已知0AC 邻接1AD邻接6 A E邻接9 A P未知 无穷 第二步 状态已知距离上游A已知0AC 已知1AD邻接原创 2016-01-30 09:36:49 · 326 阅读 · 0 评论 -
Dijkstra算法
package first;public class MatrixUDG { private int mEdgNum; // 边的数量 private char[] mVexs; // 顶点集合 private int[][] mMatrix; // 邻接矩阵 private static final int INF = Integ原创 2015-12-30 16:11:00 · 473 阅读 · 0 评论 -
哈夫曼树_1172
题目描述:哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和。输入:输入有多组数据。每组第一行输入一个数n,接着输入n个叶节点(叶节点权值不超过100,2输出:输出权值。样例输入:5 1 2 2 5 9原创 2016-01-17 12:30:38 · 551 阅读 · 0 评论 -
素数判断
1、因为 n如果整除i,则n也能整除n/i .故循环条件可以到 根号n 。根号n乘以根号n 大于n#include "stdafx.h"#include using namespace std;bool is_prime(int n){ for(int i=2;i*i<=n;i++){ if (n % i == 0) return false; } return n !=原创 2015-12-13 08:26:20 · 552 阅读 · 0 评论 -
有多少不同的面值组合?_1072
题目描述:某人有8角的邮票5张,1元的邮票4张,1元8角的邮票6张,用这些邮票中的一张或若干张可以得到多少种不同的邮资?输入:题目没有任何输入输出:按题目的要求输出可以得到的不同邮资的数目来源:2002年清华大学#include#includeint main(){ int i,j,k,t=1,m;原创 2015-09-01 14:05:09 · 769 阅读 · 0 评论 -
数字阶梯求和_1051
题目描述:给定a和n,计算a+aa+aaa+a...a(n个a)的和。输入:测试数据有多组,输入a,n(1输出:对于每组输入,请输出结果。样例输入:1 10样例输出:1234567900原创 2015-08-06 11:23:37 · 807 阅读 · 0 评论 -
最小长方形_1020
题目描述: 给定一系列2维平面点的坐标(x, y),其中x和y均为整数,要求用一个最小的长方形框将所有点框在内。长方形框的边分别平行于x和y坐标轴,点落在边上也算是被框在内。输入: 测试输入包含若干测试用例,每个测试用例由一系列坐标组成,每对坐标占一行,其中|x|和|y|小于 231;一对0 坐标标志着一个测试用例的结束。注意(0, 0)不作为任何一个测试用例里原创 2015-08-04 11:36:19 · 537 阅读 · 0 评论 -
错排问题,错位排列
1、问题: 十本不同的书放在书架上。现重新摆放,使每本书都不在原来放的位置。有几种摆法?这个问题推广一下,就是错排问题,是组合数学中的问题之一。考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排。 n个元素的错排数记为D(n)。 研究一个排列错排个数的问题,叫做错排问题或称为更列问题。错排问题最早被尼古拉·伯努利和欧拉研究,转载 2016-02-16 08:39:39 · 2991 阅读 · 0 评论 -
二分查找(递归与非递归)
int BinSearch(int Array[],int low,int high,int key/*要找的值*/) { if (low { int mid = (low+high)/2; if(key == Array[mid]) return mid; else if转载 2017-05-08 11:53:40 · 209 阅读 · 0 评论 -
单链表的插入与删除
1、插入操作把s插入p与p->next 之间步骤一、s->next=p->next(把p的后继结点赋值给s的后继结点)步骤二|、p->next=s(把存s的地址给p->next)注意:&s为:指针 s 为:s值的地址 *s为:s值p->next 存放的是某个值的地址2、删除操作 p->nex原创 2013-12-14 20:07:08 · 625 阅读 · 0 评论 -
毕业bg
题目描述: 每年毕业的季节都会有大量毕业生发起狂欢,好朋友们相约吃散伙饭,网络上称为“bg”。参加不同团体的bg会有不同的感觉,我们可以用一个非负整数为每个bg定义一个“快乐度”。现给定一个bg列表,上面列出每个bg的快乐度、持续长度、bg发起人的离校时间,请你安排一系列bg的时间使得自己可以获得最大的快乐度。 例如有4场bg: 第1场快乐度为5,持续1小时,发起原创 2015-04-15 16:17:47 · 469 阅读 · 0 评论 -
最小的K个数(Python)
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。这个题目完成的思路有很多,很多排序算法都可以完成既定操作,关键是复杂度性的考虑。以下几种思路当是笔者抛砖引玉,如果读者有兴趣可以自己再使用其他方法一一尝试。思路1:利用冒泡法,临近的数字两两进行比较,按照从小到大的顺序进行交换,如果前面的值比后面的大,则交...转载 2019-02-23 11:26:27 · 969 阅读 · 0 评论 -
用python实现冒泡算法
有这样一组数列:[7,6,5,4,3,9,8,2,1],我们想排序成这样:[1,2,3,4,5,6,7,8,9]。要怎么做呢?第一次,我们可以把9排到最右边。最终结果就变成这样:[6, 5, 4, 3, 7, 8, 2, 1,9],然后第二次,再把8拍到倒数第2位,最终结果就变成:[5, 4, 3, 6, 7, 2, 1,8, 9],以此类推,排列8次以后就完成...转载 2019-02-23 11:22:12 · 8121 阅读 · 1 评论 -
K-means算法
K-means算法是最为经典的基于划分的聚类方法,是十大经典数据挖掘算法之一算法原理随机选取k个中心点;遍历所有数据,将每个数据划分到最近的中心点中;计算每个聚类的平均值,并作为新的中心点;重复2-3,直到这k个中线点不再变化(收敛了)。时间复杂度:O(I*n*k*m)空间复杂度:O(n*m)其中m为每个元素字段个数,n为数据量,I为跌打个数。一般I,k,m均可认为是常量,...转载 2019-02-23 10:26:29 · 202 阅读 · 0 评论 -
连续子数组的最大和(Python)
问题:连续子序列最大和 给定一个数字序列[A1A2A3…An],求i,j(1<=i<=j<=n)使得Ai…Aj和最大, 输出这个最大和(连续大子序列最大和) 例如: 输入: L=[-2 ,6, -1, 5, 4, -7, 2, 3] 输入: 14 (即6,-1,5,4这个序列的和)思路:最大和连续子数组一定有如下几个特点:1、第一个不为负数2、如果前面数的...转载 2019-02-23 10:10:49 · 4164 阅读 · 0 评论 -
斐波那契数--递归和非递归实现
斐波那契数列是犹如0、1、1、2、3、5、8、·····、fn这样的数,从前书本上一般介绍的方法都是递归的方法递归方法实现:public static int FibonacciDigui(int n){ if (n == 0) { return 0; } if (n == 1) { retu...转载 2017-08-30 09:50:11 · 4493 阅读 · 1 评论 -
二分查找(递归与非递归)
import java.util.Arrays;public class binarySearcherdemo { public static void main(String[] args) { int [] number ={4,58,11,34,88,45}; Arrays.sort(number); //排序 int index =binarySearch(numbe原创 2017-08-28 17:02:39 · 266 阅读 · 0 评论 -
冒泡排序优化
import java.util.Arrays;/*冒泡排序的思想:比较相邻的两个数,如果前一个比后一个大,则将其交换位置。*/public class BubbleSort { public static void main(String[] args) { int [] number ={4,58,11,34,88,45}; /* 6 是number的长度*/ Bu转载 2017-08-28 16:51:04 · 204 阅读 · 0 评论 -
孤岛连通工程_1314
题目描述:现在有孤岛n个,孤岛从1开始标序一直到n,有道路m条(道路是双向的,如果有多条道路连通岛屿i,j则选择最短的那条),请你求出能够让所有孤岛都连通的最小道路总长度。输入:数据有多组输入。每组第一行输入n(1接着m行,每行输入一条道路i j d(0输出:对每组输入输出一行,如果能连通,输出能连通所有岛屿的最小道路长度,否则请输出字符串"原创 2015-08-26 11:21:20 · 623 阅读 · 0 评论 -
纸上谈兵: 最短路径与贪婪
原文:http://www.cnblogs.com/vamei/p/3604629.html图是由节点和连接节点的边构成的。节点之间可以由路径,即边的序列。根据路径,可以从一点到达另一点。在一个复杂的图中,图中两点可以存在许多路径。最短路径讨论了一个非常简单的图论问题,图中从A点到B点 ,那条路径耗费最短? 这个问题又异常复杂,因为网络的构成状况可能很复杂。一个最简单的思路转载 2015-08-24 15:24:17 · 541 阅读 · 0 评论 -
最大子向量和(连续子数组的最大和_1372
题目描述:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天JOBDU测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠原创 2015-07-03 15:13:19 · 432 阅读 · 0 评论 -
ZOJ_1032
题目描述:读入一个字符串,字符串中包含ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出,当某个字符用完时,剩下的仍然按照ZOJ的顺序输出。输入:题目包含多组用例,每组用例占一行,包含ZOJ三个字符,当输入“E”时表示输入结束。1输出:对于每组输入,请输出一行,表示按照要求处理后的字符串。具体可见样例。样例输入:ZZOOOJJJZZZZ原创 2015-05-07 17:23:26 · 526 阅读 · 0 评论 -
字符串匹配_1165
题目描述: 读入数据string[ ],然后读入一个短字符串。要求查找string[ ]中和短字符串的所有匹配,输出行号、匹配字符串。匹配时不区分大小写,并且可以有一个用中括号表示的模式匹配。如“aa[123]bb”,就是说aa1bb、aa2bb、aa3bb都算匹配。输入:输入有多组数据。每组数据第一行输入n(1输出:输出匹配到的字符串的行原创 2015-05-07 16:40:12 · 608 阅读 · 0 评论 -
算法第4版_Sedgwick 初始
1、如何导入stdlibjar这个库复制这个包过去,和src同目录下→然后右键buil path 就会多出现一个referenced librarypublic class inandout { public static void main(String[] args) { StdOut.print("hello,this is the first algorithm p原创 2015-05-07 09:08:16 · 607 阅读 · 0 评论 -
合并两个排序序列_1393
题目描述:输入两个递增的序列,输出合并这两个序列后的递增序列。输入:每个测试案例包括3行:第一行为1个整数n(1第二行包含n个整数,表示第一个递增序列。第三行包含n个整数,表示第二个递增序列。输出:对应每个测试案例,输出合并这两个序列后的递增序列。样例输入:41 3 5 72 4 6 8样例输出:1 2 3 4 5 6 7 8原创 2015-05-13 17:27:34 · 1047 阅读 · 0 评论 -
众数_1057
题目描述:输入20个数,每个数都在1-10之间,求1-10中的众数(众数就是出现次数最多的数,如果存在一样多次数的众数,则输出权值较小的那一个)。输入:测试数据有多组,每组输入20个1-10之间的数。输出:对于每组输入,请输出1-10中的众数。样例输入:5 1 5 10 3 5 3 4 8 6 8 3 6 5 10 7 10 2 6原创 2015-04-29 15:58:49 · 778 阅读 · 0 评论 -
最大连续子序列
题目描述: 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 输入: 测试输入包含若干测试用例,每个测试用例占2行,第1行给出正整数K( K输出: 对每个测试用例,在1行里输出最大和、最大连续子序列的第一个和最后一个元素,中间用空格分隔。如果最大连续子原创 2015-05-04 14:50:29 · 427 阅读 · 0 评论 -
奥运排序
题目描述:按要求,给国家进行排名。输入:有多组数据。第一行给出国家数N,要求排名的国家数M,国家号从0到N-1。第二行开始的N行给定国家或地区的奥运金牌数,奖牌数,人口数(百万)。接下来一行给出M个国家号。输出:排序有4种方式: 金牌总数 奖牌总数 金牌人口比例 奖牌人口比例 对每个国家给出最佳排名排名方式 和 最终排名格式为: 排名:排原创 2015-04-13 16:04:56 · 602 阅读 · 0 评论 -
递归输出字符串
题目:给定一个字符串,输出其所有连续子串,如:给定字符串为abcd,则要输出的其全部连续子串为:a,b,c,d,ab,bc,cd,abc,bcd,abcd。java方法一:public class sub_string { public static void main(String [] agrs){ String str=new String() ;转载 2014-03-20 10:57:53 · 928 阅读 · 0 评论 -
交换变量三种方法
一、三变量交换法t=a;a=b;b=t;二、不借助任何变量(要定义了加减法的数据类型)a=a+b;b=a-b;a=a-b;三、不借助任何变量(异或)a=a^b;b=a^b;a=a^b;自己与自己异或为0;0与任何数异或还是那个数。原创 2013-11-29 10:05:39 · 674 阅读 · 0 评论 -
取石子游戏(原创)
总共M个石子,N堆,两人取石子,任意取。拿到最后一个为胜利方。1、若N为2堆的情况,不相等,则先手胜。因为先手可以变成相等的情况,对方拿多少,我拿多少。最后一个肯定是我的。即:2堆异或不为0的时候,先手胜,因为先手可以使得异或为0。最后状态为xor(0,0)=02、若N为3堆的情况.M为奇数,先手胜。M为偶数,不一定啊。如(1,2,3) M为偶数(但是他们异或为0),先手必输啊原创 2013-11-28 11:55:42 · 946 阅读 · 0 评论 -
货币问题_1549
题目描述:已知有面值为1元,2元,5元,10元,20元,50元,100元的货币若干(可认为无穷多),需支付价格为x的物品,并需要恰好支付,即没有找零产生。求,至少需要几张货币才能完成支付。如,若支付价格为12元的物品,最少需要一张10元和一张2元,即两张货币就可完成支付。输入:输入包含多组测试数据,每组仅包含一个整数p(1输出:原创 2015-05-27 15:54:07 · 781 阅读 · 0 评论