数据结构和算法
数据结构和算法笔记
圆锥曲线丶
但愿吉祥
展开
-
POJ-3279 Fliptile (二进制枚举)详细题解
题目传送门:POJ-3279 Fliptile大致题意:有个N*M的矩阵,每个坐标点不是1就是0,我们需要通过翻转坐标点让这个矩阵全部为0,(翻转某一个点的话,这个点包括这个点的上下左右都会翻转);我们要尽可能使翻转次数更少,并且有多解时输出最小的那个解(就是指最后那个解转化为字符串的话也尽可能小)思路:先分析第一行,能够使第一行改变的只有本行和下一行,而我们需要将所有点都变为0,我们改变第二行时,第一行也会随之改变,所以我们要做的就是改变第二行的同时将第一行全部变为0,而第二行就交给第三行处理…原创 2020-12-09 22:40:24 · 240 阅读 · 0 评论 -
Leetcode刷题记录(数组)组合总和、组合总和 II、组合总数III、组合总和 Ⅳ
一、组合总和这道题是个典型的DFS,通过选和不选两种状态进行深搜,由于一个数可以不限次数的选取,所以在递归中,下标无需加一二、组合总和 II这道题比上题多加了个限制,就是每一个数只能用一次,并且不能包含重复的集合1、每一个数用一次:这个只需要在每次递归时让index++就能解决,选取了当前数,就不能在选这个数了2、不能包含重复的集合:这个我们可以先将数组排好序,在每一层循环中只能选择一种数,例如:1 1 1 2 2 这组数,在第一层循环中如果选择了第一个1,那么就不能选择第二个1,下次选择满足条件原创 2022-07-04 20:16:56 · 206 阅读 · 0 评论 -
蓝桥杯 全球变暖 简单写法 详细易懂
@蓝桥杯 全球变暖 简单写法 超详细题目链接:全球变暖思路: **这道的大致写法就是用dfs将各个岛屿先编号(vis值)作为t, 编完号之后将上下左右有' . '这个字符的' # '的vis值改为0, 之后遍历整个字符数组,查找还剩几个vis数不为0,作为 h(当然不能重复计算) 再用t-h+1(为什么要加1?因为有些vis值一开始就是0) 那么下面就是具体代码,具体请看注释**#include<bits/stdc++.h>using namespace std;cons原创 2020-10-05 21:36:00 · 319 阅读 · 0 评论 -
蓝桥杯 幸运数 简单 详细 题解(作者是菜鸡 勿喷)
题目:幸运数主要思路:运用递归和循环语句维护a数组,也就是用a[i]数组储存最终答案最后遍历a数组输出答案。具体的细节可以看注释代码:#include<bits/stdc++.h>using namespace std;const int maxn=1e6+5;int m,n,ans,a[maxn];void Change(int p){ int q=p; if(a[p]>n) return;//如果这里的数大于n,也就是题目要求的最大的数,就可以退出了 f原创 2020-10-09 23:41:47 · 261 阅读 · 0 评论 -
Leetcode刷题记录(数组)两数之和、三数之和、四数之和
该文仅作为作者记录学习的笔记,如有错误,敬请指出该题主要思路:先通过循环遍历第一个数,再利用containsKet方法找到另一个数然后以的形式存入HashMap中为什么不一开始将所有数以这种方式存入HashMap?因为,这道题每一个数只能选一遍,这样做是为了防止一个数被选两遍代码:二、三数之和这里借鉴LeetCode的思路(几乎都是“借鉴”)要想不重复,我们就可以先排序,保证三个数是:a...原创 2022-05-16 15:19:13 · 80 阅读 · 0 评论 -
归并排序详解
public class SortTest{ public static void mergesort(int[] a,int l,int r) { int[] temp = new int[r-l+1]; sort(a, l, r,temp); } public static void sort(int[] a,int l,int r,int[] temp) { if(l==r) return; int mid=l+(r-l)/2; sort(a, l, mid,temp)原创 2021-09-15 17:15:26 · 73 阅读 · 0 评论 -
几钟的排序算法:冒泡,插入,快速
一.冒泡排序package project1;import java.util.Scanner;public class BbbleSort { public static void main(String[] args) { int[] sum = new int[10]; Scanner in = new Scanner(System.in); for(int i=0;i<10;i++) { sum[i] = in.nextInt(); } for(int i原创 2021-09-08 19:09:39 · 98 阅读 · 0 评论 -
JAVA只有增删改查的简易单向链表
class Node<T>{//节点类 public T data; public Node<T> next; public Node() {} public Node(T data) { this.data = data; }}public class MyList<T> {//链表类 private Node<T> head = new Node<T>(); public int nodeSize() {//链表大小原创 2021-09-08 20:52:10 · 117 阅读 · 1 评论