- 博客(37)
- 收藏
- 关注
原创 01背包——dp解法
/*有n个重量和价值分别为wi,vi的物品,从这些物品中挑选出总重量不超过W的物品,求所有挑选方案中价值总和的最大值。1≤n≤1001≤wi,vi≤1001≤W≤10000输入:n=4(w,v)={(2,3),(1,2),(3,4),(2,2)}W=5输出:7(选择第0,1,3号物品)因为对每个物品只有选和不选两种情况,所以这个问题称为01背包。*/题解如图:public class problem_0_1背包问题 { public static vo
2022-04-06 15:48:12
828
原创 部分背包问题——贪心
/**有n个物体,第i个物体的重量为wi,价值为vi。在总重量不超过C的情况下让总价值尽量高。每一个物体都可以只取走一部分,价值和重量按比例计算。求最大总价值注意:每个物体可以只拿一部分,因此一定可以让总重量恰好为C。*/题解:本题通过贪心思想解题,尽可能拿价值高的物品,这样放入背包的价值才最大,但是对价值排序后会使得原来每种物品的重量和价值的对应关系丢失,我们引入物品类,使得每种物品的重量和价值捆绑在一起。最后通过物品类实现Comparable接口,按照价值和重量比排序,最后再从物品数组,从
2022-04-05 15:23:00
925
原创 力扣 1561. 你可以获得的最大硬币数目——贪心
题解:贪心算法解题,因为自己每次都是要第二多的,所以每次都要让Alice拿最多,Bob拿最少,这样自己拿的才最多。如果按照每次自己拿第二多,Bob拿第三多,自己可能会拿的更少,因为第二轮自己拿的就是第5多,而不让Bob拿第三多,自己第二轮就拿的就是第三多。言简意赅就是 撑死Alice,饿死Bobstatic int maxCoins(int[] piles) { int s=0; int len= piles.length; Arrays.sort..
2022-04-04 15:19:24
171
原创 力扣 LCP 06. 拿硬币——递归+贪心思想
题解:此题应用 递归+贪心思想解题,先拿一堆,一次先拿两枚硬币再拿一枚硬币,拿完一堆再拿下一堆,直到所有硬币堆拿完class Solution { public int minCount(int[] coins) { ArrayList<Integer> res=new ArrayList<>(); //创建用于统计结果的集合 minCountCore(coins,0,res); //dfs求解,从第0堆硬币开始拿 ..
2022-04-04 13:47:48
561
原创 剑指 Offer 06. 从尾到头打印链表
解题思路:先将链表翻转,以及统计结点个数,最后再从尾部往前遍历class Solution { public int[] reversePrint(ListNode head) { ListNode pre=null; ListNode cur=head; int count=0; //记录结点个数 //先翻转链表,统计结点..
2022-04-03 21:01:38
308
原创 素数环——dfs解法
/**输入正整数n,对1-n进行排列,使得相邻两个数之和均为素数,输出时从整数1开始,逆时针排列。同一个环应恰好输出一次。n<=16如输入:6输出:1 4 3 2 5 61 6 5 2 3 4*/题解:递归+深搜+回溯思想 解题 ,相当于全排列,枚举所有的可能,再最后处理环的问题public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=
2022-04-03 18:44:23
389
原创 力扣52. N皇后 II ——递归回溯法求解
题解:通过递归回溯思想求解,尝试在棋盘上放皇后,判断尝试将皇后在棋盘上是否会冲突,皇后放置完毕则统计结果。 解题思路就是 通过4x4棋盘放置4皇后推广到nxn 放置n 皇后private static int count=0; public int totalNQueens(int n) { int[][] board=new int[n][n]; //创建棋盘 boolean[][] used=new boolean[n][n]; /..
2022-04-03 15:58:40
332
原创 面试题 08.07. 无重复字符串的排列组合
题解:利用dfs深度优先+递归回溯思想,以及开辟一个栈来临时保存当前遍历的情况,以此解题 import java.util.ArrayDeque;import java.util.ArrayList;import java.util.Deque;import java.util.ListIterator;public class test5 { public static void main(String[] args) { String s="qwe"; ..
2022-04-03 09:21:28
154
原创 力扣 1832. 判断句子是否为全字母句
题解:a-z的ASCILL码为97-122,利用ASCILL码解题,将字符的整型ASCILL码作为数组的下标,如该字符出现,则将其下标对应值加1,最后遍历辅助数组, public boolean checkIfPangram(String sentence) { int[] chs=new int[256]; //创建辅助数组,下标作为ASCILL码 char[] chars = sentence.toCharArray(); //将字符串转化为数组 ..
2022-04-02 23:39:16
102
原创 力扣46. 全排列
import java.util.ArrayDeque;import java.util.ArrayList;import java.util.Deque;import java.util.List;public class Solution { public static void main(String[] args) { int[] a={1,2,3}; List<List<Integer>> permute = permute.
2022-04-02 22:55:06
298
原创 力扣187. 重复的DNA序列——利用hash函数暴力求解
题解: 利用hash函数去求计算子串的hash值,若子串第一次出现则将其加入到map集合中,再次出现时利用set则保存重复的子串,最后并输出class Solution { public List<String> findRepeatedDnaSequences(String s) { //官网自带命名方式 return finSubstr(s); } static List finSubstr(String s){ //寻找子串 ..
2022-04-01 14:32:04
232
原创 利用hash值进行字符串匹配
public class test10 { public static void main(String[] args) { String s="abcdabcd"; //源串 String p="bcd"; //目标串 match(p,s); } static void match(String p,String s){ long hash_p=hashVal(
2022-03-31 16:21:46
798
原创 将字符串按单词翻转
// 将字符串按单词翻转,如 here you are 翻转成 are you herepublic class test { public static void main(String[] args) { String s="here you are "; String[] words = strReverse(s).split("\\s"); //将字符串翻转后再分割,you are here 翻转后为: ereh era uoy
2022-03-31 09:42:57
378
原创 通过Map集合判断两字符串的字符集是否相同
import java.util.HashMap;import java.util.Map;import java.util.Scanner;//判断两字符串的字符集是否相同public class test {public static void main(String[] args) {String s1=“abcccddaa”;String s2=“abcd”;boolean res=check(s1,s2);System.out.println(res);}static bo
2022-03-17 20:23:49
452
原创 压缩字符串——单向扫描法
输入样例:“aabcccccaaa”输出样例:a2b1c5a3 //判断字符串中有无重复字符public class test9 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); String src=sc.nextLine(); int p=1; //定义指针,初始位于字符串第二个元素 int cont=1
2022-03-15 09:08:48
88
原创 判断字符串中有无重复字符——巧用ASCILL码
public class test9 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); String src=sc.nextLine(); judge(src); } static void judge(String src){ int Rem=0; //记录重复字符数
2022-03-14 21:20:42
832
原创 将数组中0所在的行和列清零
public class test9 { public static void main(String[] args) { int[][]a={ {1,2,3,4}, {5,6,7,8}, {9,0,11,12}, {13,14,15,16}, {101,102,103,104} }; int[
2022-03-14 20:37:23
409
原创 顺时针打印二维数组
/**顺时针打印二维数组输入1,2,3,45,6,7,89,10,11,1213,14,15,16101,102,103,104输出1 2 3 4 8 12 16 104 103 102 101 13 9 5 6 7 11 15 14 10*/public class test9 { public static void main(String[] args) { int[][]a={ {1,2,3,4},
2022-03-13 21:42:58
405
原创 蓝桥杯2021省赛——时间显示
题目描述小蓝要和朋友合作开发一个时间显示的网站。在服务器上,朋友已经获取了当前的时间,用一个整数表示,值为从 197019701970 年 111 月 111 日 00:00:0000:00:0000:00:00 到当前时刻经过的毫秒数。现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需要显示出时分秒即可,毫秒也不用显示,直接舍去即可。给定一个用整数表示的时间,请将这个时间对应的时分秒输出。输入描述输入一行包含一个整数,表示时间。输出描述输出时分秒表示的当前时间,格式形如 HH:
2022-03-13 20:02:25
353
原创 蓝桥杯2021省赛 拼卡片
public class test5 { public static void main(String[] args) { solve(); } static void solve( ){ int value=0; //记录卡片的数量 for (int i = 1; i < 50000; i++) { //进行枚举 String s=i+""; for (i.
2022-03-10 20:24:55
271
原创 洛谷UVA101——线性表
#include#include#include#include<Windows.h>using namespace std;vectorblock[30];int n; //木块总个数void location(int b,int &block_place,int &block_height) {for (int i = 0; i < n; i++) {for (int j = 0; j < block[i].size(); j++) {if.
2021-12-10 21:26:11
292
原创 Linux基本目录机构
Linux 基本目录结构1. 基本介绍2.目录用途3.总结1. 基本介绍Linux的文件系统采用级层式子的树状目录结构,最上层是根目录“/”。其目录结构就像一棵倒立生长的树2.目录用途/bin: 是Binary的缩写,这个目录存放着最经常使用的命令。/sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。/home:存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。/root:该目录为系统管理员,也称作超级权限
2021-12-09 08:42:37
316
原创 通过位运算 将整数的奇偶位互换
题目:将整数的奇偶位互换/*1001 奇偶位互换后为 0110① 1001 & 32个(1010…1010) 目的:保留奇数位, 偶数位结果为0② 1001 & 32个(0101…0101) 目的:保留偶数位, 奇数位结果为0①的结果右移 ^ ②的结果左移 实现奇偶互换^ (异或操作)*/public class 将整数的奇偶位互换 {public static void main(String[] args) {int x=9;int ou=x&am
2021-11-14 21:14:28
215
原创 通过位运算 求二进制中1 的个数
方法2示意图:package test;import java.util.Random;import java.util.Scanner;public class WeiYunSuan3 {public static void main(String[] args) { Random random=new Random(); Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int count=0;.
2021-07-07 22:50:50
117
原创 通过 按位异或运算 找出落单的那个数
/* 利用按位与解题A^A=0A^0=A所以 ( arr[0]^arr[1] ^arr[2] ^…k ^ k.arr[arr.length-1] )=arr[0] ^arr[1] ^arr[2] ^arr[3] …k (arr[i]与arr[1+1]值相同,所有成对的按位与后都为0 )=k*/public class WeiYuanSuan2 {public static void main(String[] args) {int N=11;int arr[]= {1,1,2,2,3.
2021-07-07 22:02:21
155
原创 通过异或运算 找出唯一成对的数
package test;import java.util.Random;public class WeiYunSuan {public static void main(String[] args) {int N=1001;int arr[]=new int[N];Random random=new Random();for(int i=0;i<arr.length-1;i++){arr[i]=i+1; //填充数组arr[0]-arr[1000]} .
2021-07-07 21:32:44
302
原创 结构体嵌套二级指针和一级指针 释放时出现的问题
time: 2020.8.5发现问题所在,应释放main函数p指向的内存,而不是freeTeacher函数里p指向的内存#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <string.h>#include <windows.h>// 4. 重写结构体嵌套一级指针老师和二级指针学生的代码//结构体类型,每个导师有三个学生typed
2020-08-05 20:53:37
733
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人