当前位置: 首页 > news >正文

算法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】再重新进行快速排序。

​​​​​​​

http://www.lryc.cn/news/390360.html

相关文章:

  • Rust监控可观测性
  • SVN 的忽略(Ignore)和递归(Recursively)以及忽略部分
  • vue3开发过程中遇到的一些问题记录
  • Jedis、Lettuce、RedisTemplate连接中间件
  • 【C++】继承(详解)
  • 网络io与select,poll,epoll
  • 【Linux】多线程(一万六千字)
  • sh脚本笔记2
  • js替换对象里面的对象名称
  • 鸿蒙开发设备管理:【@ohos.settings (设置数据项名称)】
  • STM32之五:TIM定时器(2-通用定时器)
  • 【分布式系统】监控平台Zabbix对接grafana
  • 操作系统真象还原:编写硬盘驱动程序
  • firewalld防火墙(二)
  • Android-悬浮窗口
  • 打破僵局:Foxit Reader无法打开的终极解决方案
  • [调试] JTAG下运行正常,从QSPI或者SD卡启动则无响应,如何查找问题
  • Linux内核 -- 多线程之wait_event用法
  • 双指针系列第 8 篇:盛水最多的容器。几句话讲明白!
  • c++高阶-1-模板
  • .net core 的 winform 的 浏览器控件 WebView2
  • Django QuerySet对象,all()方法
  • 自动生成网站sitemap
  • 中国经济昆虫志(55卷)
  • linux环境安装elasticsearch缓存数据库和Kibana客户端
  • OpenSSL的一些使用案例
  • 常用字符串方法<python>
  • 线程池666666
  • Python28-5 k-means算法
  • 主流国产服务器操作系统技术分析