算法day1 两数之和 两数相加 冒泡排序 快速排序

        两数之和

        最简单的思维方式肯定是去凑两个数,两个数的和是目标值就ok。这里两遍for循环解决。

 

          两数相加

                        敲了一晚上哈哈,结果超过int范围捏,难受捏。

public class Test2 {
    public static void main(String[] args) {
//        ListNode l1 = new ListNode(2);
//        l1.next = new ListNode(4);
//        l1.next.next = new ListNode(3);
//
//        ListNode l2 = new ListNode(5);
//        l2.next = new ListNode(6);
//        l2.next.next = new ListNode(4);

        ListNode l1 = new ListNode(5);
        ListNode l2 = new ListNode(5);


        ListNode listNode = new Test2().addTwoNumbers(l1, l2);
        System.out.println("l = " + listNode.val);
        System.out.println("l = " + listNode.next.val);
//        System.out.println("l = " + listNode.next.next.val);


//        for (int i = 0; ; i++) {
//            ListNode l = listNode.next;
//            if (l.next != null) {
//                System.out.println("l = " + l.val);
//            }else return;
//        }
    }
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
//            Map map = new HashMap();
//            map.put("l1",l1.val+l1.next.val+l1.next.next.val)
        int num1 = l1.val;
        System.out.println("num1 = " + num1);
        int num2 = l2.val;
        ListNode l = l1.next;
        ListNode ll = l2.next;
        for (int i = 1; ; i++) {
            if ( l != null && l.next != null  ){
                num1 += l.val*Math.pow(10,i);
                l =  l.next;
            } else{
                if ( l != null  ){
                    num1 +=  l.val*Math.pow(10,i);
                }
                System.out.println("num1 = " + num1);
                for (int j = 1; ; j++) {
                    if (ll != null && ll.next != null){
                        num2 += ll.val*Math.pow(10,j);
                        ll =  ll.next;
                    }else{
                        if (ll != null ){
                            num2 += ll.val*Math.pow(10,j);
                        }
                        System.out.println("num2 = " + num2);
                        int temp = num1 +num2;
                        System.out.println("temp = " + temp);
                        int digit;
                        int place = 1;  //位数
                        ListNode lll = new ListNode();

                        int count = 0;
                        while (temp != 0) {
                            temp = temp / 10;
                            ++count;
                        }



                        temp = num1 +num2;
                        if (temp == 0)count=1;
                        ListNode listNode = new ListNode();
                        Map<String, ListNode> map =null;
                        for (int i1 = 0; i1 < count; i1++) {
                            digit = temp % 10;
                            temp = temp / 10;
                            System.out.println("Digit at place " + place + " is: " + digit);
//                            lll.val = digit;
//                             lll = lll.next;
                            if (i1 == 0){
                                lll.val = digit;
                                if (count!=1){
                                    lll.next =   listNode;
                                }
                            }else if (i1 == 1){
                                map = new HashMap<>();
                                map.put("listNode"+i1,new ListNode());
                                listNode.val = digit;
                                if (count==2)return lll;
                                listNode.next = map.get("listNode"+i1);
                                System.out.println("map.get(\"listNode111\"+i1).val = " + map.get("listNode"+i1).val);
                            } else{
                               map.get("listNode"+(i1-1)).val = digit;
                                if (i1==count-1)return lll;
                                map.put("listNode"+i1,new ListNode());
                                map.get("listNode"+(i1-1)).next = map.get("listNode"+i1);
                                System.out.println("map.get(\"listNode222\"+i1).val = " + map.get("listNode"+i1).val);
                            }
                            place *= 10;
                        }
                        return lll;
                    }
                }
            }
        }
    }


}

//两数求和
class ListNode {
    int val;
    ListNode next;
    ListNode() {}
    ListNode(int val) { this.val = val; }
    ListNode(int val, ListNode next) { this.val = val; this.next = next;}
}

        冒泡排序  

        有这样一个数组:[ 6,1,2,4,6,2  ]  冒泡排序是将相邻两个元素比大小转换位置最终实现从小到大或者从大到小排序的过程。

        首先关注第一个元素6:

                6和1比转换位置

                6和2比转换位置

                6和4比转换位置

                6和6比不动。

                6和2比转换位置

        再然后第二个元素到最后一个元素。这样每一个元素都找到他们对应的位置。

public static void sort1(int[] data){
        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data.length - i - 1; j++) {
                if (data[j] > data[j + 1]){
                    int k = data[j];
                    data[j] = data[j + 1];
                    data[j + 1] = k;
                }
            }
        }
    }

        快速排序

排序——快速排序(Quick sort)-CSDN博客    快速排序底层是递归的思想。

        有这样一个数组:[ 6,1,2,4,6,2  ] ,快速排序是有左右两个数组的下标指针,一个基准数。

一开始 :

                左指针指向最左边  

                右指针指向最右边

                基准数默认初始值为  最左边

                左指针负责挑出大于基准值的,右指针负责挑出小于基准值的。当左右指针相遇时,将数组分为左右两个以基准值为界限的小数组和大数组。

                然后左右两个数组递归。


        从右指针开始比,2比基准数6小就和左指针交换位置,同时左指针的值6赋给基准值6.

        这时,左指针位置下移到1

        再从左指针开始比,1比基准值6小,2比基准值6小,4比基准值6小,6比基准值6不大

        左右指针相遇时 将基准值6赋给右【2,1,2,4,6 ,6

        这个时候的小数组是【2,1,2,4,6】 大数组【6】再重新进行快速排序。

​​​​​​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/769352.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

矩阵优化递推式子

题目链接 对于f(n)3f(n−1)2f(n−2)2这种式子&#xff0c;先将右边拥有的项竖着列出来&#xff0c;不包括系数&#xff0c;再将这个竖列的下一项写出来&#xff0c;然后将右边的每一项按照左边顺序的等式写出来&#xff0c;然后我们将等式右边只保留系数&#xff0c;那么这些系…

【Java EE】Spring Boot配置文件

Spring Boot配置文件 一、配置文件的分类 一共有三类&#xff0c;分别是 properties, yml, yaml&#xff0c;其中properties相当于是老版&#xff0c;yml是yaml的缩写&#xff0c;这两个相当于新版。 二、配置文件的语法 1. properties 语法的构成是以"." 为分隔…

【微服务网关——服务发现】

1.服务发现 1.1 介绍 服务发现是指用注册中心来记录服务信息&#xff0c;以便其他服务快速查找已注册服务服务发现分类: 客户端服务发现服务端服务发现 1.2 客户端服务发现 客户端服务发现&#xff08;Client-side Service Discovery&#xff09;是一种微服务架构中的模式…

nginx的LNMP构建+discuz论坛

一、LNMP&#xff1a; L&#xff1a;linux 操作系统 N&#xff1a;nginx前端页面的web服务 P&#xff1a;PHP&#xff0c;是一种开发动态页面的编程语言&#xff0c;解析动态页面&#xff0c;起到中间件的作用&#xff08;在nginx和数据库的中间&#xff09;&#xff0c;在中…

该文件没有与之关联的程序来执行该操作,请安装应用,若已经安装应用,请在‘默认应用设置’页面中创建关联。

作为一个喜欢折腾桌面外观的人,我发现桌面上的快捷方式图标都有一个小箭头。于是,我按照网上的方法在注册表中删除了 IsShortcut 键。结果,重启后任务栏上的图标点击时出现了提示:“该文件没有与之关联的程序来执行该操作,请安装应用,若已经安装应用,请在‘默认应用设置…

UnityUGUI之三 Text

富文本 常用语法&#xff1a; 1.加粗 <b> text </b> 2.斜体 <i> text </i> 3.尺寸 <size?> text </size> 4.颜色 <color#ff0000> text </color>

html+js+css美观好看的动态404界面

中间的那一段话&#xff08;root开头的那一句&#xff09;是逐字输出的 那段话显示完后&#xff0c;自动显示超大号字体404 来都来了点个赞&#xff0c;关注一下呗&#x1f604;&#xff0c;本人发誓&#xff1a;你关注我&#xff0c;马上关注你 界面 源码在图片下面…

E1696 无法打开 源 文件 “point.h“

一段时间没碰vs2022突然导入一个项目就出现下面错误 在网上查了很多办法&#xff0c;都没什么有用。 试了试&#xff0c;相对路径可以解决。 但是每次都要用相对路径太麻烦了。 又试了试&#xff0c;发现还是硬件问题&#xff0c;就像摩托长期不开等到突然想开的时候就死活打…

通信软件开发之业务知识:PON口割接什么意思?

一 PON口割接&#xff08;原创总结&#xff09; 在通信领域&#xff0c;PON口割接指的是对无源光网络&#xff08;Passive Optical Network&#xff0c;PON&#xff09;端口进行的切换或调整操作。简单来说&#xff0c;就是对光纤网络中的某个端口进行重新连接或重新分配&…

2024鸿翼加速推进数据要素生产力,“五驾马车”再启新鸿图

过去的2023年&#xff0c;在大家逐步走出3年疫情&#xff0c;对经济复苏的美好期待中&#xff0c;一路“高开低走”的市场态势&#xff0c;相信让许多的数字化从业者感受到了业务的沮丧和寒意。 但是&#xff0c;即便整个行业受经济大环境影响&#xff0c;鸿翼依旧逆势取得了连…

UE5 04-重新加载当前场景

给关卡加一个淡出的效果 给关卡加一个淡入的效果, 这个最好放置在Player 上,这样切关卡依然有这个效果

使用Charles实现Android抓包,附带Charles破解教程

1.下载Charles 网址&#xff1a;下载Charles 安装完成后的界面&#xff1a; 2.配置http抓包 点击该选项 可以看到代理的 ip 和端口号 然后在手机的wifi中配置代理&#xff08;手机和电脑要在同一局域网&#xff09;&#xff0c;代理选择手动&#xff0c;并填入ip和端…

UE5 02-给物体一个扭矩力

需要注意的是: 1.弹簧臂 可以使用绝对旋转 这样就可以不跟随父物体Player的旋转 2.弹簧臂 进行碰撞测试勾选,当这个弹簧线被遮挡,摄像机会切换到碰撞点位置 进行碰撞测试勾选,当这个弹簧线被遮挡,摄像机不会切换到碰撞点位置

yolov8 目标检测快速streamlit可视化界面

参考&#xff1a; https://github.com/ultralytics/ultralytics/blob/2330caa50a8a8e0bb61408df8dca0721fb350dbe/ultralytics/solutions/streamlit_inference.py 版本&#xff1a; ultralytics 8.2.27 # Ultralytics YOLO &#x1f680;, AGPL-3.0 licen…

买卖股票的最佳时期含冷冻期(leetcode)

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 也就有这样的状态转移方程&#xff1a; 买入&#xff1a;dp[i][0] max(dp[i-1][1] - prices[i], dp[i-1][0]); 可买入&#xff1a;dp[i][1] max(dp[i-1][1], dp[i-1][2]); 冷冻期&#xff1a;dp[i][2] dp[i-1][0] prices…

mybatis、mybatis-plus插件开发,实现数据脱敏功能

首先说一下mybatis中四大组件的作用&#xff0c;下面开发的插件拦截器会使用 四大组件Executor、StatementHandler、ParameterHandler、ResultSetHandler Executor&#xff1a; Executor 是 MyBatis 中的执行器&#xff0c;负责 SQL 语句的执行工作。它通过调度 StatementHan…

在SpringBoot 3.0环境下创建一个SpringBoot 项目

一、环境配置 1.专业版的IDEA 版本号&#xff1a;尽量选择不要太老&#xff0c;不要太早 这里以2023.3.1为例。 官网&#xff1a;Download IntelliJ IDEA – The Leading Java and Kotlin IDE (jetbrains.com) 破解版&#xff1a;网上找资料哦&#xff01;&#xff01;&#…

【Python】基于动态规划和K聚类的彩色图片压缩算法

引言 当想要压缩一张彩色图像时&#xff0c;彩色图像通常由数百万个颜色值组成&#xff0c;每个颜色值都由红、绿、蓝三个分量组成。因此&#xff0c;如果我们直接对图像的每个像素进行编码&#xff0c;会导致非常大的数据量。为了减少数据量&#xff0c;我们可以尝试减少颜色…

7.7、指针和函数

代码 #include <iostream> using namespace std;//实现两个数字进行交换 void swap01(int a, int b) {int temp a;a b;b temp;cout << "swap01a " << a << endl;cout << "swap01b " << b << endl; }void sw…

AUTOSAR NvM模块(七)

NvM工具配置demo 一切block的配置根据自己的需求&#xff01; NvMBlockDescriptor NvM Common MemIf General FeeBlockConfiguration FeeGeneral