
Java写算法
小琪爷
人生如戏啊 靓仔 所以做什么事情最好都要去尽最大努力
展开
-
最大子数组和 滑动窗口解
class Solution {//找到并返回数组nums的最大值public int maxOfNums(int[] nums){int maxAll = nums[0];for(int i=1;i<nums.length;i++)if(nums[i]>maxAll)maxAll=nums[i];return maxAll;}public int maxSubArray(int[] nums) {int l=0,r=0;//记录最大和int maxSum=maxOfNu原创 2022-05-17 12:51:40 · 467 阅读 · 0 评论 -
让人头皮发麻的KMP的next函数 困扰我三四天后终于解决了
package _KMP;public class _字符串匹配 { public static void main(String[] args) { String s = "adadada"; String p = "ad"; int[] next = new int[p.length()]; getNext(next,p); //kmp int j=0; for (int i=0.原创 2022-03-31 20:59:25 · 220 阅读 · 0 评论 -
单双链表的操作思想
核心思想主要是:使用数组去模拟链表结构体----->>>数组在这里插入代码片原创 2022-03-27 17:24:37 · 654 阅读 · 0 评论 -
离散化的思想
package _离散化;import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.Scanner;public class _求l到r区间的值 { private static class MyPair { public int x; public int y; public MyPair(int x,.原创 2022-03-24 22:17:49 · 91 阅读 · 0 评论 -
区间合并的思想
package _区间合并;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;public class _合并区间 { public static void merge(List<int[]> list){ Collections.sort(list, Comparator.comparingIn.原创 2022-03-24 22:11:12 · 218 阅读 · 0 评论 -
位运算求整数中二进制1的个数
package _位运算;public class _位运算求整数中1的个数 { public static void main(String[] args) { int n = 4; int ans = 0; while (n!=0){ int tmp = n>>0&1; if (tmp==1){ ans++; }原创 2022-03-24 17:24:30 · 182 阅读 · 0 评论 -
位运算的位置互换
package _位运算左右移动;public class _位运算交换位置省空间 { public static void main(String[] args) { int n =3; int m =4; n = n^m; m = n^m; n = n^m;//太妙了 System.out.println(n); System.out.println(m); }}目原创 2022-03-24 17:22:50 · 427 阅读 · 0 评论 -
前缀和思想
原创 2022-03-24 17:10:14 · 113 阅读 · 0 评论 -
位运算的左移右移
package _位运算左右移动;public class _移动计数技巧 { public static void main(String[] args) { int n = 6; System.out.println("左移动:操作数*2^操作数"); System.out.println(6<<2); System.out.println(4<<2); System.out.print.原创 2022-03-23 17:54:10 · 128 阅读 · 0 评论 -
双指针思想
package _双指针;import java.util.Map;public class _一个数组中连续的不同子数组最长 {public static void main(String[] args) {int [] nums = {1,4,5,6,7,3,4,5,6,2,3,4,4,5};//双指针的模板int [] a = new int[nums.length];int res=0;for (int i =0,j=0;i<nums.length;i++){a[nums[.原创 2022-03-23 17:44:37 · 638 阅读 · 0 评论 -
高精度乘法思想
package _高精度;import java.util.Arrays;public class _乘法 {public static void main(String[] args) {String a = “345”;int[] a_num = new int[a.length()];for (int i = 0; i < a_num.length; i++) {a_num[i] = a.charAt(a_num.length - i - 1) - ‘0’;//很奇怪不知道为什么.原创 2022-03-21 18:30:09 · 192 阅读 · 0 评论 -
高精度减法思想
package _高精度;import java.util.Arrays;public class _减法 { public static void main(String[] args) { //取数 String a = "345", b = "324"; int[] a_num = new int[a.length()]; int[] b_num = new int[b.length()]; for (i.原创 2022-03-21 18:07:00 · 186 阅读 · 0 评论 -
二分法的模板
public class _二分模板 { public static void main(String[] args) { int[] nums = new int[]{1,2,6,6,6,6,7,9}; int l = 0,r = nums.length-1; int x=6; while (l<r){//6出现的第一次位置 int mid = 1+(r+l)/2;//加一防止死循环 .原创 2022-03-20 12:53:34 · 139 阅读 · 0 评论 -
归并排序的思想
public class MergeSort { public static void main(String[] args) { int [] nums = new int[]{1,2,7,6,6,6,6,9,11,22,33}; int[] temp = new int[nums.length]; System.out.println(1/2); Sort(nums,0,nums.length-1,temp); f.原创 2022-03-20 11:08:47 · 86 阅读 · 0 评论 -
快速排序的思想
import java.lang.reflect.Array;public class QuickSort { public static void main(String[] args) { int [] nums = new int[]{1,2,7,6,6,9,11,22,33,55,66,77}; quick_sort(nums,0,nums.length-1); for(int i:nums){ System.ou.原创 2022-03-19 22:54:32 · 201 阅读 · 0 评论 -
Java之整数反转
7class Solution { public int reverse(int x) { int rev = 0; while(x!=0){ if(rev<Integer.MIN_VALUE/10||rev>Integer.MAX_VALUE/10){ return 0; } int digit = x%10; x /=10;原创 2021-10-13 23:01:10 · 188 阅读 · 0 评论 -
Java算法之两数之加
2class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode pre = new ListNode(0); ListNode cur = pre; int carry = 0; while(l1!=null||l2!=null){ int x = l1==null?0:l1.val; int原创 2021-10-12 15:50:33 · 81 阅读 · 0 评论 -
Java之有效的括号
20class Solution { public boolean isValid(String s) { char[] chars = s.toCharArray(); Stack<Character> Stack1 = new Stack(); for(Character c:chars){ if(c=='('||c=='['||c=='{'){ Stack1.add(c);原创 2021-10-12 14:54:08 · 122 阅读 · 0 评论 -
Java之乘积最大子数组
152题本次的心得感悟就是觉得很难 其他没别的class Solution { public int maxProduct(int[] nums) { if(nums.length == 0) return 0; int ans = nums[0]; //两个mDP分别定义为以i结尾的子数组的最大积与最小积; int[] maxDP = new int[nums.length]; int[]原创 2021-10-12 14:13:47 · 234 阅读 · 0 评论 -
Java算法之旋转数组
189class Solution { public void rotate(int[] nums, int k) { int len = nums.length; int[] tmps = new int[len]; for(int i=0;i<len;i++){ tmps[i] = nums[i]; } for(int j=0;j<len;j++){ nums[(j+k)%len]原创 2021-09-30 18:06:35 · 176 阅读 · 0 评论 -
Java算法之字符串最长公共前缀
14class Solution { public String longestCommonPrefix(String[] strs) { if(strs.length==0){ return ""; } String ans = strs[0]; for(int j=1;j<strs.length;j++){ int i=0; for(;i<ans.原创 2021-09-30 17:32:29 · 251 阅读 · 0 评论 -
Java算法之两数之和双指针法
167class Solution { public int[] twoSum(int[] numbers, int target) { int [] nums = new int[2]; int j = 0; int i; for(i = 0;i<numbers.length;i++){ int tmp = numbers[i]; j= 1+i; whil原创 2021-09-29 17:45:27 · 293 阅读 · 0 评论 -
Java算法之只出现一次的数字
136class Solution { public int singleNumber(int[] nums) { int item = nums[0]; int j=1; while(j<nums.length){ item = item^nums[j]; j++; } return item; }}原创 2021-09-29 13:36:42 · 158 阅读 · 0 评论 -
Java算法之寻找旋转数组中的最小值
153class Solution { public int findMin(int[] nums) { int i=0; int j=nums.length-1; while(i<j){ if(nums[i+1]<nums[i]){ return nums[i+1]; } i++; if(i<j){原创 2021-09-29 12:35:57 · 92 阅读 · 0 评论 -
java算法之希尔排序
912class Solution { public int[] sortArray(int[] nums) { int len = nums.length; int gap = nums.length/2; while(gap!=0){ for(int i=gap;i<len;i++){ int value = nums[i]; // 上一个元素的位置原创 2021-09-29 10:18:54 · 71 阅读 · 0 评论 -
java写算法之二叉搜索树查找
700class Solution { public TreeNode searchBST(TreeNode root, int val) { if(root==null){ return null; } if(root.val==val){ return root; }else if(root.val<val){ return searchBST(root原创 2021-09-27 11:43:52 · 78 阅读 · 0 评论 -
Java算法之最大子序和
class Solution { public int maxSubArray(int[] nums) { int sum=0; int ret=Integer.MIN_VALUE; int len = nums.length; for(int i=0;i<len;i++){ sum+=nums[i]; if(sum>ret){ ret = su原创 2021-09-26 12:17:18 · 74 阅读 · 0 评论 -
Java算法之搜索插入位置
35class Solution { public int searchInsert(int[] nums, int target) { int left=0; int right = nums.length-1; int mid= 0; while(left<=right){ mid = (left+right)/2; if(nums[mid]<target){原创 2021-09-26 12:04:21 · 100 阅读 · 0 评论 -
Java算法之移除元素
class Solution { public int removeElement(int[] nums, int val) { int len = nums.length; int p=0; int q=0; while(q<len){ if(nums[q]!=val){ nums[p] = nums[q]; p++;原创 2021-09-26 11:39:25 · 88 阅读 · 0 评论 -
java算法之删除数组重复项
class Solution { public int removeDuplicates(int[] nums) { int len = nums.length; int i=0; for(i=0;i<len-1;i++){ if(nums[i]==nums[i+1]) { for (int j = i + 1; j < len - 1; j++) {原创 2021-09-26 11:22:47 · 147 阅读 · 0 评论 -
java之插入排序算法
912class Solution { public int[] sortArray(int[] nums) { int tmp; int j; for(int i=1;i<nums.length;i++){ tmp = nums[i]; for(j=i-1;j>=0&&nums[j]>tmp;j--){ nums[j+1] = nums原创 2021-09-25 17:45:11 · 155 阅读 · 0 评论 -
java之选择排序
class Solution { public int[] sortArray(int[] nums) { for(int i=0;i<nums.length-1;i++){ int min = nums[i]; int index = i; for(int j=i+1;j<nums.length;j++){ if(nums[j]<min){原创 2021-09-25 17:38:01 · 70 阅读 · 0 评论 -
❤️力扣线性枚举算法第二题数组中连续为一的最大个数
添加链接描述484最大连续一的个数class Solution { public int findMaxConsecutiveOnes(int[] nums) { int count =0; int index=0; int max = 0; int[] sums = new int[10000]; if(nums.length<=10000&&nums.length>=0){原创 2021-09-18 12:28:51 · 103 阅读 · 0 评论 -
线性枚举算法日常练习
做题日记领扣线性枚举添加链接描述1464数组中两元素的最大乘积class Solution { public int maxProduct(int[] nums) { if (nums.length <= 500&&nums.length>=2){ int max1 =0,max2 = 0; for(int num:nums){ if(num>max1){原创 2021-09-18 11:23:21 · 182 阅读 · 0 评论