算法操作
关于使用java实现大数的加法
package two24; public class Solution415 { public String addStrings(String num1, String num2) { // 获取两个字符串的数据 char[] a = num1.toCharArray(); char[] b = num2.toCharArray(); // 获取最长的长度 // +1是因为两者相加最大就是比这个位数多1 int[] res =new int[Math.max(num1.length()+1,num2.length()+1)]; // 来进行判断,假如int的坐标以经超过了string的最大的长度,则将该串用0来代替 int count = 0; // 用A和B分别来接收两个string类型里面的数据 int A,B; // 因为计算数据一般是从后面开始计算的,所以在我们进行加法运算的时候,要从后面开始计算 int del1 = num1.length() ,del2 = num2.length() ; // 使超过的长度的数字命为0 for (int i = res.length-1; i >0; i--) { if(count<num1.length()) { del1--; A = a[del1] - '0'; }else { A = 0; } if(count<num2.length()) { del2--; B = b[del2] - '0'; }else { B = 0; } res[i] += A+B; res[i-1] = res[i]/10; res[i] = res[i] % 10; count++; } // 使用String来进行接收和返回,更加的方便 String result = ""; int i; if(res[0] == 0) { i = 1; }else { i = 0; } for(;i<res.length; i++) { result +=res[i]; } return result; } }
快排数组
class Solution { public int[] sortArray(int[] nums) { Arrays.sort(nums); return nums; } }
我爱java,但是方便归方便,咱们还是老老实实的阐述一下快排的原理
选择一个作为做对照的数据,一般是第一个,然后从做参照的后面的一个(根据情况来定),安排两个指针,一个从前面开始,一个从后面开始比较,假如前面的比那个用来对照的大,那就停止,后面的开始运行直到找到一个比前面的小的数(前提就是后面的指针不能跳到比前面的指针还前面),然后这样不断地循环,或者一直找不到,当两指针相遇的时候将那个对照的函数与其进行交换。
class Solution { public int search(int[] nums, int target) { for (int i = 0; i < nums.length; i++) { if (nums[i] == target) { return i; } } return -1; } }
查询指定元素的题,简直不敢想象这么简单,但是挑战一下自己变成logn的时间复杂度把,简而言之就是把这个转换成二分的方法
但是这个数据是半无序的,那么使用通常使用的二分的话就会无法保留地址,从而得到自己不想要的结果,但是这个只是在某一个位置上面进行了一下反转而已,本身其实是一个有序的数据,就相当于,把一个有序的数据转换成了两个有序的数据,而且两者还有联系,比如最前面那个的数据一定不比最后面小,假如要查找的数据在中间的某一个位置,下标为0的位置的数比他大,下标为mid的数也比他大的话就说明该要找的数据在0--mid之间,假如下标为0的位置的数比他大,下标为mid的数也比他小的话就说明要找的数在mid到l之间,假如下标为0的位置的数比他小,下标为mid的数也比他小的话就说明要找的数在0--mid之间,假如下标为0的位置的数比他小,下标为mid的数也比他大的话就说明要找的数在0--mid之间(0可以替换成s)
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决