算法操作

关于使用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)

 

posted @   湖南陈冠希  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示