
算法
yeyinfan123
这个作者很懒,什么都没留下…
展开
-
牛客--字符流中第一个不重复的字符
import java.util.HashMap;public class Solution { StringBuffer sb=new StringBuffer(); //Insert one char from stringstream public void Insert(char ch) { sb.append(ch); } //return the first appearence once char in current string原创 2020-07-25 12:56:59 · 168 阅读 · 0 评论 -
牛客--统计一个数字在排序数组中出现的次数
public class Solution { public int GetNumberOfK(int [] array , int k) { if(array.length==0) return 0; int high=array.length-1; int num=0; int low=0; if(k>array[high]||k<array[low]){ return 0;原创 2020-07-25 12:53:20 · 166 阅读 · 0 评论 -
剑指 Offer 11. 旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1class Solution { public int minArray(int[] numbers) {int low=0;int high=numbers.length-1;while(low<high){原创 2020-07-24 21:28:46 · 82 阅读 · 0 评论 -
java十大排序算法
1 冒泡排序(最大的先落底)/** * 冒泡排序 * * @param array * @return */ public static int[] bubbleSort(int[] array) { if (array.length == 0) return array; for (int i = 0; i < array.length; i++) for (i原创 2020-07-22 10:26:52 · 104 阅读 · 0 评论 -
剑指 Offer 57 - II. 和为s的连续正数序列
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。class Solution { public int[][] findContinuousSequence(int target) { List<int[]> list = new ArrayList<>(); int start=1 ;int end=1; int sum=原创 2020-07-19 20:50:53 · 86 阅读 · 0 评论 -
java求前k个最小数
class Solution { public int[] getLeastNumbers(int[] arr, int k) { if (k == 0) { return new int[0]; } else if (arr.length <= k) { return arr; } partitionArray(arr, 0, arr.length - 1, k); int[] res = new i原创 2020-07-19 17:38:21 · 207 阅读 · 0 评论 -
扑克牌中的顺子
从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。class Solution { public boolean isStraight(int[] nums) { Arrays.sort(nums); int skey=0; boolean flag=false; for(int i=0;i<nums.length-1;i++)原创 2020-07-17 21:16:53 · 179 阅读 · 0 评论 -
股票的最大利润(一次买卖)
假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?class Solution { public int maxProfit(int[] prices) { int cost=Integer.MAX_VALUE; int profit=0; for(int i=0;i<prices.length;i++){ cost=Math.min(cost,prices[i]); profit=Math.原创 2020-07-17 20:17:54 · 346 阅读 · 0 评论 -
剑指 Offer 58 - I. 翻转单词顺序
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。class Solution { public String reverseWords(String s) { String res=""; String []strArr=s.trim().split(" "); for(int i=strArr.length-1;i>=原创 2020-07-15 21:45:09 · 94 阅读 · 0 评论 -
第一个只出现一次的字符(leetcode,剑指offer)
class Solution { public char firstUniqChar(String s) { char res=' ';int [] ch=new int[256];for(int i=0;i<s.length();i++){ ch[s.charAt(i)]++;}for(int i=0;i<s.length();i++){ if(ch[s.charAt(i)]==1) { res=s.charAt(i);原创 2020-07-14 22:12:58 · 156 阅读 · 0 评论 -
最长无重复子串
思路:设定一个初始基准下标 i=-1j从0到字符串长度,遍历,重复字符出现情况是出现在当前左侧区域内( abcdb此时最新的i<j, 重复字符b,比较记录的最大串, abcd的长度与 j-i的长度 ----j为4,i为1 ),另一种是 (abcde,此时长度就是在dp[j-1]基础上+1)利用hashmap记录字符出现下标class Solution { public int lengthOfLongestSubstring(String s) { HashMap&l原创 2020-07-14 20:42:50 · 105 阅读 · 0 评论 -
礼物的最大价值
class Solution { public int maxValue(int[][] grid) {int lenh=grid.length;int lenl=grid[0].length;for(int i=0;i<lenh;i++){ for(int j=0;j<lenl;j++){ if(i==0&&j==0) continue; else if(i==0) grid[i][j]+=grid[i][j-1]; .原创 2020-07-12 15:14:05 · 121 阅读 · 0 评论 -
把数字翻译成字符串
题目描述:给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。示例 1:输入: 12258输出: 5解释: 12258有5种不同的翻译,分别是"bccfi", “bwfi”, “bczi”, “mcfi"和"mzi”思路:f(i)=f(i-1)+f(i-2) [10,25] i-1,i可被分解时其它 f(i)原创 2020-07-11 21:52:28 · 168 阅读 · 0 评论 -
把数组排成最小的数(leetcode,剑指offer,java)
排序判断规则: 设 numsnums 任意两数字的字符串格式 xx 和 yy ,则若拼接字符串 x + y > y + xx+y>y+x ,则 m > nm>n ;反之,若 x + y < y + xx+y<y+x ,则 n < mn<m ;作者:jyd链接:https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof/solution/mian-shi-ti-45-原创 2020-07-11 20:17:19 · 152 阅读 · 0 评论 -
一次编辑(java,leetcode)
字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。/*始终保持lena为最长串,要对字符串判空 null;还要注意一个字符时的情况 eg b和""这种*/class Solution { public boolean oneEditAway(String first, String second) { if(first==null||second==null) return原创 2020-07-10 22:03:24 · 195 阅读 · 0 评论 -
java 猴子称大王
思路:num为数组长度;维持一个同长度的数组,用来记录对应下标元素是否为标记,点中的猴子被标记 为0,即为淘汰,直至num=0时的那个元素即为最后一个猴子import java.util.Scanner;public class demo { /* * 猴子选大王 */ public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num = sc.nextInt();原创 2020-07-05 20:31:41 · 301 阅读 · 0 评论 -
剑指 Offer 56 - I. 数组中数字出现的次数(有2个只出现一次,其它均出现2次)
一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。class Solution { public int[] singleNumbers(int[] nums) {int res[]=new int [2];int i=0;int sum=0;while(i<nums.length){ sum^=nums[i]; i++;}int first=1;while((su原创 2020-07-08 17:23:31 · 137 阅读 · 0 评论 -
字符串转化成整数java-剑指offer
第一种方法(超时了。。)class Solution { public int strToInt(String str) { int flag=1; int i=1; int num=0; int temp=0; str=str.trim(); if(str.charAt(0)=='-'){ flag=-1; }else if(str.charAt(0)=='+'){ flag=1; }else{ i=0;原创 2020-07-08 17:01:38 · 144 阅读 · 0 评论 -
剑指 Offer 64. 求1+2+…+n
终止条件 :n-1>0class Solution {public int sumNums(int n) {boolean flag = n > 1 && (n += sumNums(n - 1)) > 0;return n;}}原创 2020-07-08 15:41:08 · 80 阅读 · 0 评论 -
B-(B)树与B+,B*树的区别
B树实际使用的B树都是在原B树的基础上加上平衡算法,即“平衡二叉树”(B树)B-树 **是一种多路搜索树(并不是二叉的)**: 1.定义任意非叶子结点最多只有M个儿子;且M>2; 2.根结点的儿子数为[2, M]; 3.除根结点以外的非叶子结点的儿子数为[M/2, M]; 4.每个结点存放至少M/2-1(取上整)和至多M-1个关键字;(至少2个关键字) 5.非叶子结点的关键字个数=指向儿子的指针个数-1; 6.非叶子结点的关键字:K[1], K原创 2020-07-07 10:52:45 · 971 阅读 · 0 评论 -
java 快排
private static void QuickSort(int[] num, int left, int right) { //如果left等于right,即数组只有一个元素,直接返回 if(left>=right) { return; } //设置最左边的元素为基准值 int key=num[left]; //数组中比key小的放在左边,比key大的放在右边,key值下标为i int i=left; int j=right; while(i<j){原创 2020-07-07 10:33:38 · 1018 阅读 · 0 评论 -
搜素插入排序leetcode(折半插入)java
class Solution { public int searchInsert(int[] nums, int target) { int min=0; int max=nums.length-1; int res=0; int mid=0; while(min<=max){ mid=(min+max)/2; if(nums[mid]==targe原创 2020-06-07 19:44:39 · 126 阅读 · 0 评论 -
最长无重复子串java(leetcode)
思路:left,right 2个指针控制,判断当前字符是否在hashmap中已出现,如果出现,分二种情况:1 在当前保存的最大串左边出现,此时left不变;2 在当前保存的最大串中出现,此时left指针移至该字符后一位,统计到本次新的最大串,并与之前保存的最大串进行比较,确定是否替换class Solution { public int lengthOfLongestSubstring(String s) { HashMap<Character,Integer> hash=原创 2020-06-06 21:28:15 · 251 阅读 · 0 评论 -
最长回文串(中心扩散+动态优化)
找出字符串中最长回文串,暴力法及Manacher算法这里不列了,第一种不推荐,另一种想深入研究可自行搜索~~1 先介绍一下中心扩散思想:从每一个位置,向二边扩散即可(区分奇数和偶数个数)2 基于中心思想,利用动态规划,这里可推出具体的公式来假设d[i][j]表示字符串中第i个字符到第j个字符是否为回文串,则d[i-1[j+1] 可转化为:若d[i][j]为回文串,则a[i-1]==a[j+1]时,d[i-1][j+1]为回文串,其它情况为false当i-1== j+1 的时候就是两边界相等的时原创 2020-06-06 20:40:27 · 167 阅读 · 0 评论 -
最长公共子序列与最长公共子串
子序列: 顺序不变,但可能不连续;子串:顺序不变,且连续的串eg: s1=abcdefgs2 =a1234bcaadfga最长的子序列为 abcddfg最长的子串为 bc最长子序列LCS解法:动态规划如上,假设i为s1最后一个元素下标,j为s2最后一个元素下标,公共子序列可分以下2种情况:(i,j均不为0时)第一种:s1[i]=s2[j],此时 最长子序列可转化为求 s1 中前i-1与s2中前j-1个的结果+ s1[i]或s2[j];第二种 : s1[i]!=s2[j原创 2020-06-01 21:07:05 · 230 阅读 · 0 评论 -
买卖股票的最佳时机(可多次买卖,含交易手续费)
class Solution {public int maxProfit(int[] prices, int fee) {if(pricesnull||prices.length0){return 0;}int[] buy=new int [prices.length];int[] sell=new int[prices.length];buy[0]=-prices[0];sell[0]=0;for(int i=1;i<prices.length;i++){buy[i]=Math.原创 2020-05-31 15:26:01 · 727 阅读 · 0 评论 -
java leetcode字符串转小写
class Solution {public String toLowerCase(String str) {char[] chArr=str.toCharArray();if(str==null||str.length()==0){return str;}else{for(int i=0;i<str.length();i++){if(str.charAt(i)>=‘A’&&str.charAt(i)<=‘Z’){chArr[i]= (char)(str.c原创 2020-05-31 10:43:44 · 101 阅读 · 0 评论 -
java leetcode二分查找
class Solution {public int search(int[] nums, int target) {if(nums.length==0)return -1;int mid,left=0,right=nums.length-1;if(target<nums[left]||target>nums[right]||left>right){return -1;}while(left<=right){mid=(left+right)/2;if(target原创 2020-05-31 10:20:50 · 335 阅读 · 0 评论 -
leetcode寻找数组的中心索引
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2020-05-31 10:03:45 · 125 阅读 · 0 评论