算法
~嘟嘟
这个作者很懒,什么都没留下…
展开
-
返回字符串中第一个唯一字符的下标
借助哈希表的存储性质来进行 相关的操作class Solution { public int firstUniqChar(String s) { Map<Character,Integer> map=new HashMap<>(26); char [] chars=s.toCharArray();//将字符串转换成为 字符数组 并放在字符数组中 for (char ch:chars){ map.put(ch, map.g原创 2021-10-19 20:59:21 · 173 阅读 · 0 评论 -
KMP实现字符串的匹配
package learnmen;import java.util.Arrays;/** * 解决模式串 在文本串中是否出现过的算法 如果出现过找最早位置的算法 * Knuth-Morris-Pratt字符串查找算法 简称是KMP算法 常用在 一个文本字符串中 查找 一个模式串 p的出现位置 * kmp算法中的关键是 得到部分匹配表 然后 根据部分匹配表中的数据 来实现我们的优化移动 模板字符串 * */public class Kmp { public static v原创 2021-10-19 19:28:33 · 206 阅读 · 0 评论 -
进行整形的反转
对整数进行反转 如果反转之后的整数超过了范围 就返回0 public int reverse(int x){ int res=0; while(x!=0){ int t=x%10; //对10取余数 得到末位的数字 int newRes=res*10+t; //判断是否溢出 if((newRes-t)/10!=res){ //如果溢出就直接返回0原创 2021-10-13 08:49:14 · 79 阅读 · 0 评论 -
Java双指针反转字符串
利用双指针来反转 字符数组public class reveserString { public static void reveserSting( char[] s){ int i=0,j=s.length-1; //采用双指针的方式进行修改 char temp; while(i<j){ temp=s[i]; s[i]=s[j]; s[j]=temp;原创 2021-10-13 08:28:44 · 189 阅读 · 2 评论 -
Java哈希表实现求两数之和
在Java中使用哈希表来求解两数之和public int[] twoSum1(int [] nums, int target){ Map<Integer,Integer> map=new HashMap<>(); int [] arr=new int[2]; for (int i = 0; i < nums.length; i++) { if(map.containsKey(target-nums[i])原创 2021-10-12 23:08:07 · 264 阅读 · 0 评论 -
Java双指针实现两数之和
利用双指针实现求两数之和public int [] twoSum(int [] nums,int target){ //双指针实现求解两数的和 int maxArea=nums.length-1; int i=0; int j=1; while(nums[i]+nums[j]!=target){ if(j==maxArea){ i++; j原创 2021-10-12 22:56:44 · 268 阅读 · 0 评论 -
Java异或运算
查找数组中只出现过一次的数值 public static int singleNumber (int [] arr){ int a=0; for(int i:arr){ a^=i; } return a; }原创 2021-10-11 19:54:42 · 62 阅读 · 0 评论 -
Java实现数组末位加1
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入:digits = [1,2,3]输出:[1,2,4]解释:输入数组表示数字 123。示例 2:输入:digits = [4,3,2,1]输出:[4,3,2,2]解释:输入数组表示数字 4321。示例 3:输入:digits = [0]输出:[1] public static原创 2021-10-11 19:53:13 · 364 阅读 · 0 评论 -
Java数组移动0
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]public static void moveZeroes(int [] nums){ /** * 把所有非0的数向前移动 然后把后面的数全部赋值为0就可以实现 */ if (nums == null || nums.length ==原创 2021-10-11 19:51:39 · 112 阅读 · 0 评论 -
Java判断数组中有没有相同的元素
如果数组中有相同的元素就返回true 否则返回falsepublic class Demo03 { public Boolean repeat(int [] nums) { /** * 要能够考虑到利用数据结构进行辅助的判断 * * HashSet 哈希表是不允许有相同的元素出现的 所以可以借助哈希表进行处理 */ Set<Integer> set =new HashSet<原创 2021-10-11 16:22:29 · 1839 阅读 · 0 评论 -
实现旋转数组
对数组进行旋转输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例 2:输入:nums = [-1,-100,3,99], k = 2输出:[3,99,-1,-100]解释:向右旋转 1 步: [99,-1,-100,3]向右旋转 2 步: [3,99,-1,-100]原创 2021-10-11 15:51:23 · 47 阅读 · 0 评论 -
买卖股票的最佳时机
如果我们知道了股票每天的价格如何才能够实现获得最大的利润?public class Demo01 { //获取最大的利润 如果我们知道股票每天价格为多少的话 想要求解最大的利润 就是 public static void main(String[] args) { int [] prices={7,1,5,3,6,4}; //这是每一天股票的价格 System.out.println(maxProfit(prices));原创 2021-10-11 15:25:38 · 47 阅读 · 0 评论 -
深入理解归并排序之求小和问题
在一个数组中,将比当前元素小的当前元素左侧元素累加所求的和成为这个数组的小和。对小和的求解,我们首先想到的可能是利用遍历的方式将当前元素左侧的元素全部遍历并与当前元素进行比较,然后依次相加得到最终的结果,这个方法也的确可以求出正确的结果,但是时间复杂度相对而言较高,所以我们在这里利用归并排序的方式进行操作。求左侧有多少元素比当前元素小,我们可以转换为求右侧有多少元素比当前元素大 ,这样就说明对当前元素在计算小和的时候出现的次数。这里需要注意一个点就是当左右两侧的数据相等的时候,我们需要将右侧的数据先放原创 2021-10-04 11:33:09 · 192 阅读 · 0 评论 -
Java归并排序
Java实现归并排序:import java.util.Arrays;public class GuiBing { public static void main(String[] args) { //归并排序也是利用递归进行的排序 int []arr=new int[]{2,6,3,65,9,8,7,50}; Process(arr,0,arr.length-1); System.out.println(Arrays.toSt原创 2021-10-03 23:18:57 · 47 阅读 · 0 评论 -
Java插入排序
利用异或运算实现插入排序import java.util.Arrays;public class InsertSort { public static void main(String[] args) { //实现插入排序 int [] arr =new int[]{5,3,6,78,6,3,7}; sort(arr); System.out.println(Arrays.toString(arr)); }原创 2021-10-03 16:38:11 · 40 阅读 · 0 评论 -
位运算(异或)求数组中出现过奇数次的1种与2种数
位运算是比算数运算快得多的一种运算方法package algorithm.sort;public class Operation { public static void main(String[] args) { //数组中只有一种数出现奇数次,其他的数出现偶数次, 问这个奇数次的数是 int [] arr=new int[]{1,2,3,1,2}; Judge(arr); //数组中有两个数出现奇数次,其他的两个数均出现原创 2021-10-03 16:20:18 · 109 阅读 · 0 评论 -
时间复杂度比较以及额外空间复杂度O(1)
在评价一个算法的优劣的时候 一般情况之下我们会先根据算法的时间复杂度的指标进行一个判断,看算法是属于O(N平方) 或者O(N立方) 指数数值越小则证明时间复杂度相对较低 但是当二者的指数指标相同的时候 就要根据实际运行的结果来判断到底哪一种算法更优,...原创 2021-10-03 14:40:17 · 1233 阅读 · 0 评论