leetcode
618GLOAL_COOK2237
未来由你选择!
展开
-
动态规划概念、01背包、完全背包
投资分配问题(股票投资问题)背包问题(工厂排放问题、装载问题)原创 2021-09-27 17:10:04 · 254 阅读 · 0 评论 -
秋招笔试题
1.掌qu1.单列表实现栈class Node{ //https://blog.csdn.net/wuzhaojun1st/article/details/78010693 Object element; Node next; public Node(Object element) { this(element,null); } public Node(Object element, Node next) { this.原创 2021-09-26 15:21:44 · 255 阅读 · 0 评论 -
leetcode记录
1.最长回文串用dp:题目class Solution { public String longestPalindrome(String s) { int len = s.length(); // 特判 if (len < 2){ return s; } int maxLen = 1; int begin = 0; // 1. 状态定义原创 2021-09-14 09:57:26 · 219 阅读 · 0 评论 -
优势洗牌【田忌赛马】 贪心
就是你知道B了,返回一个重新排序的A (能一 一对应比B把的数组)思路:首先对A 和B进行排序,然后从A中拿出最小的和B最小的进行比较,如果还是比B小,那么就把A的那个元素丢进右边的队列中去。如果取出的A比B大,那么就在B的旁边存进列表(可以用Map模拟)中去: public static void main(String[] args) { //如果现在A和B一一比较,那么A比B小三个,输了/* int[] A=new int[]{10,24,8,32}; .原创 2021-09-05 20:06:45 · 189 阅读 · 0 评论 -
Dota2参议院 【贪心】
每次都应该把本结点往后下标最小的对手干掉。eg:RDRDD,如果R先把第三个D先干掉。那么第二个D会干掉第二个R,R必输。如果R先干掉第一个D,那么就到第二个R再禁掉D,R必赢。思路:可以使用贪心算法,局部最优,每次干掉对手下标最小的元素,再把本身加入到队尾(所以用队列),因为要循环嘛。public class leetcode49 { public static void main(String[] args) { String str=new String("RDDR");.原创 2021-09-05 12:49:23 · 125 阅读 · 0 评论 -
打家劫舍1【递归、动态规划】
1 、不用动态规划解法:这道题就是求数组的下标不能连续 而且求最大和 。 不能用贪心算法哦,因为如[1,2,3]你不能取1的时候局要看2,取2的时候看和3哪个大,那么就很难取到。用递归解:思路:看i-2 和i-1的情况。如果i-2 > i-1 那么就取i 。如果i-2<i-1那么就取i-1,而不能取i了。那么就是取 i-1 或者 i-2+i的public static void main(String[] args) { int[] array=new int[.原创 2021-09-04 17:27:57 · 412 阅读 · 0 评论 -
香槟塔 [找出规律解题]
public static void main(String[] args) { System.out.println(champagneTower(5,2,0)); } /** * @description: poured倒了多少杯 query_row查那行那列的被子 * @param: * @param: null * @return: * @author QLBF * @date: 2021/9/3 17:17..原创 2021-09-03 17:31:10 · 120 阅读 · 0 评论 -
预测赢家-子游戏【动态规划dp】
如果是石子游戏这道题就是先手必赢的解法1:递归思路:public static void main(String[] args) { int[] array=new int[]{5,200,2,3,1}; //模拟石子游戏,堆数为偶,先手必赢 //int[] array=new int[]{5,200,2,3,1};//堆数为5是奇数 先手必输 int sum=0; for (int i : array) { ..原创 2021-09-02 21:39:08 · 235 阅读 · 1 评论 -
省份数量问题【深度优先遍历 广度优先遍历】
使用了递归之后,时间复杂度都会变为O(n)或者O(logN)1、深度优先public static void main(String[] args) { //这个表示下标为0的城市连了自己和1号城市,没有连2号城市。 //1号城市连了0和自己。2号城市只连了自己,所以这里省份为2. System.out.println(getProvince(new int[][]{{1, 1, 0}, {1, 1, 0}, {0, 0, 1}})); ..原创 2021-09-01 21:40:49 · 218 阅读 · 0 评论 -
三角形的最大周长【贪心算法 21】
思路:我们可以贪心来做,首先对这个数组排序,然后从大到小遍历找到符合的就return。示例 1:输入:[2,1,2]输出:5示例 2:输入:[1,2,1]输出:0示例 3:输入:[3,2,3,4]输出:10示例 4:输入:[3,6,2,3]输出:8public static void main(String[] args) { int[] array=new int[]{2,3,4,5,-1,1,6}; System.out.println(max.原创 2021-08-31 21:24:37 · 177 阅读 · 0 评论 -
柠檬水找零【贪心算法 20】
输入:[5,5,5,10,20] 输出:true输入:[10,10] 输出:false这里贪心算法涉及了最优解, 当顾客来了20块,那么先用10+5来找,因为尽可能留多一点5块给来10块的找。public class leetcode20 { public static void main(String[] args) { int[] custom=new int[]{5,5,5,10,10,10,20}; System.out.println(lemon..原创 2021-08-31 20:58:03 · 179 阅读 · 0 评论 -
最长连续递增序列[贪心算法 19]
从0开始寻找递增序列,并将长度记录,记录递增序列的最后一个下标,然后从该下标继续寻找,记录长度,取长度最大的即可【贪心算法就在于找到当前个的长度,然后和之前那个长度对比,如果之前的小就抛弃掉,然后继续想找更大的】public static void main(String[] args) { int[] array=new int[]{2,1,3,4,-2,4,5,6,-7,0}; System.out.println(findLength(array)); }.原创 2021-08-31 20:30:19 · 126 阅读 · 0 评论 -
二叉树的最小深度【深度优先DFS,广度优先BFS 17、18】
1、深度优先DFS遍历整颗数,找到每一个叶子节点,从叶子节点往上开始计算,左右子节点都为空则记录深度为1左右子节点只有一边,深度记录为子节点深度+1左右两边都有子节点,则记录左右子节点的深度较小值+1class TreeNode{ int val; TreeNode left; TreeNode right; public TreeNode(int val, TreeNode left, TreeNode right) { this.val = .原创 2021-08-30 21:38:40 · 165 阅读 · 0 评论 -
求子数组最大平均数【滑动窗口 简单 15】
就是利用滑动窗口:把新的值加上,旧的值删掉,很简单的:public static double findMaxAverage(int[] array,int k){ double sum=0; //先计算第一个窗口的值 for (int i = 0; i < k; i++) { sum+=array[i]; } double max=sum; //max初始化先是第一个窗口的 ..原创 2021-08-30 11:33:42 · 137 阅读 · 0 评论 -
算法题小技巧
1.set重复的元素会返回false的:原创 2021-08-29 16:22:09 · 156 阅读 · 0 评论 -
排序硬币[暴力、二分 13]
(1) 暴力迭代思路:放了一行后,看剩下的硬币够放下一行不//解法1 暴力迭代 public static int CoinSort(int num){ for (int i = 1; i <= num; i++) { num=num-i; if (num <= i){ return i; } } return 0; }.原创 2021-08-29 13:19:18 · 120 阅读 · 0 评论 -
斐波那锲数列 [12、暴力递归、去重递归、双指针算法详解]
解法:(1)暴力递归,缺点:很多重复计算了,时间复杂度高(2的n次方j)//解法1:暴力递归递归,缺点:很多重复计算了 public static int calculate(int num){ if (num == 0){ return 0; } if (num==1){ return 1; }else { return calculate(num-1)+.原创 2021-08-29 11:06:23 · 220 阅读 · 0 评论 -
两数之和(用map标记)
一首先你能想到用两重for暴力解题,但是我们得用map来,时间复杂度会降低一点:数组有序无序都可以:public class leetcode10 { public static void main(String[] args) { int[] array=new int[]{4,2,3,1,5,6}; System.out.println(Arrays.toString(solution(array,10))); }//这里的map用的真是秒原创 2021-08-28 11:46:47 · 134 阅读 · 0 评论 -
三个数的最大乘积[线性扫描]
1.排序思路:1.三个数都是整数或者都是负数:那么就排序,取大的前三个2.两负一正:取排序后倒数两个负数,和取排序最大那个数相乘3.两正一负:直接像第一种那样取前三大public static int sortMethod(int[] array){ Arrays.sort(array); int n = array.length; //就是两种情况而已 return Math.max(array[0]*array[1]*arr.原创 2021-08-19 20:51:20 · 177 阅读 · 0 评论 -
x的平方根[二分法、牛顿迭代]
1.二分法这里的二分法的是O(logn)而暴力算法是O(根号x),好一点:public class leetcode7 { public static void main(String[] args) { System.out.println(binarySearch(24)); } //这里传进来的x是正整数 public static int binarySearch(int x){ int index=-1,left=0,right.原创 2021-08-18 23:41:31 · 234 阅读 · 0 评论 -
寻找数组的中心下标、求数组和
思路:先计算数组的总和,然后再第一一个变量从左边开始+,总和-掉它累加的,如相等则找到:public class leetcode6 { public static void main(String[] args) { int[] array=new int[]{1,3,6,4,5,1}; System.out.println(privoIndex(array)); } public static int privoIndex(int[] arr.原创 2021-08-18 14:11:47 · 109 阅读 · 0 评论 -
删除排序数组中的重复项 [双指针算法]
public class leetcode5 { public static void main(String[] args) { int[] array=new int[]{0,1,2,2,3,3,3,4,4}; System.out.println(duplicates(array)); } public static int duplicates(int[] nums){ int i=0; for (int ..原创 2021-08-17 23:04:04 · 68 阅读 · 0 评论 -
跳台阶问题 [斐波那锲数列]
f(n)=f(n-1)+f(n-2);原创 2021-08-17 14:55:31 · 77 阅读 · 0 评论 -
统计素数 [暴力BP、埃筛法]
解法1:暴力法(BP)package com.hjy.leetcode;/** * @author QLBF 输入n个数,统计素数的个数 * @version 1.0 * @date 2021/8/15 21:10 */public class leetcode1 { public static void main(String[] args) { bp(10000); } //使用暴力法,因为0和1规定不是素数也不是,所以从2开始 publ.原创 2021-08-15 21:59:14 · 92 阅读 · 0 评论