temp

堆排序的java实现

余生长醉 提交于 2020-02-28 13:01:07
有时利用特殊的数据结构可以极大的提高计算机的运算效率,堆排序利用了完全二叉树的便捷性,提高了排序的效率,时间复杂度为O(nlogn) 递归实现: public class HeapSort { public static void main ( String [ ] args ) { int [ ] arr = new int [ ] { 30 , 42 , 7 , 66 , 3 , 51 , 67 , 21 , 19 , 45 } ; sort ( arr ) ; } public static void sort ( int [ ] arr ) { buildHeap ( arr ) ; // 构建大顶堆 for ( int a : arr ) { System . out . print ( a + " " ) ; } // 打印 67 66 51 42 45 30 7 21 19 3 System . out . print ( "\n" ) ; int temp ; for ( int i = arr . length - 1 ; i > 0 ; i -- ) { // 依次交换堆顶(最大值)到最后一个结点 temp = arr [ 0 ] ; arr [ 0 ] = arr [ i ] ; arr [ i ] = temp ; rebuildHeap ( arr , 0

107. 二叉树的层次遍历 II

允我心安 提交于 2020-02-28 10:46:03
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其自底向上的层次遍历为: [ [15,7], [9,20], [3] ] 解题思路:首先temp临时记录层次遍历每一层的结点值,当遍历到下一层的结点时就将temp记录到result中. 代码实现 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<vector<int>> levelOrderBottom(TreeNode* root) { vector<vector<int> > result; //记录每一层的节点值 if(root == NULL) return result; queue<pair<TreeNode*,int> > Queue; vector<int> temp; /

第 005 讲:数据类型

喜欢而已 提交于 2020-02-28 05:24:12
数据类型: 1. 整型:int 2. 字符型:str 3. 浮点型:float 4. 布尔类型True or false: bool isinstance:数据类型做对比。 测试题: 1. 你知道为什么布尔类型(bool)的true和FALSE分别用0和1来代替吗? 答案:计算机只认识二进制,由于二进制只有0和1,所以true和FALSE分别用0和1 2. 使用int()将小数转换为整数,结果为向上取整还是向下取整? 答案: 直接截取,向下取整 3.我们人类思维是习惯于“四舍五入”你有什么方法使得int()按照“四舍五入”的方式取整吗? 答案:int(5.4+0.5) int(5.6+0.5) 4.取得一个变量的类型,视频中介绍的可以使用type()和instance(),你更倾向于哪个? 答案:判断a的类型 type用法:type(a) instance用法:instance(a,str);instance(a,int);instance(a,bool);instance(a,float) 5.Python3可以给变量命名为中文,知道为什么吗? Python3源码文件默认使用utf-8编码(支持中文),这使得一下代码合法: >>> 小甲鱼 = ‘我爱你’ >>> print(小甲鱼) >>> 我爱你 动动手: 0.针对视频中提到的小漏洞,再次改进我们的小游戏:

android简易智能容错计算器

安稳与你 提交于 2020-02-28 03:17:45
看了一些网上的代码,感觉多少有点问题,有的不能计算浮点数,有的不能计算多位数,或者没办法保证乘除法在加减法的前面,或者不能与负数进行混合运算。 我实现的如下: 特点是:在按“=”之前智能预算结果显示,点击按钮,按钮颜色变化 思路是:将输入的中缀表达式转换成后缀表达式进行计算 难点是:带负数的四则混合运算,以及智能预算显示(这一部分容易出问题) 当然最后要记得负0的处理还是为0,除以0提示不能除以0 源码地址: https://github.com/liuchenyang0515/Simple_Intelligent_fault---tolerant_calculator 如演示图不能正常播放,请刷新网页 简易智能容错计算器示意图 (模拟我的华为手机界面和效果): 这里将中缀表达式转换为后缀表达式然后计算出结果的java代码贴出来,android代码见上面地址: import java.text.DecimalFormat; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; import java.util.Stack; public class Test { private static StringBuilder str; public static void main

Leetcode:567.字符串的排列

孤者浪人 提交于 2020-02-27 18:50:03
题目:给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。 示例1: 输入: s1 = "ab" s2 = "eidbaooo" 输出: True 解释: s2 包含 s1 的排列之一 ("ba"). 示例2: 输入: s1= "ab" s2 = "eidboaoo" 输出: False AC代码,滑动窗口算法: class Solution { public boolean checkInclusion(String s1, String s2) { int i = 0; int j = 0; int n_s1 = s1.length(); int n_s2 = s2.length(); int[] counts = new int[26]; for(int x = 0;x < n_s1;++x){ ++counts[s1.charAt(x) - 97]; } int[] temp = new int[26]; int[] index_count = new int[26]; int hasReturn = 0; while(i <= n_s2 - n_s1 && j < s2.length()){ if(counts[s2.charAt(j) - 97] == 0){ i = ++j; temp

iOS之可拖拽重排的CollectionView

怎甘沉沦 提交于 2020-02-27 04:36:38
修复了拖拽滚动时抖动的一个bug,新增编辑模式,进入编辑模式后不用长按触发手势,且在开启抖动的情况下会自动进入抖动模式,如图: test.gif 图1:垂直滚动 drag1.gif 图2:水平滚动 drag2.gif 图3:配合瀑布流(我直接使用了上个项目的瀑布流模块做了集成实验) drag5.gif 我将整个控件进行了封装,名字是 XWDragCellCollectionView 使用起来非常方便,github地址: 可拖拽重排的CollectionView ;使用也非常简单,只需3步,步骤如下: 1、继承于XWDragCellCollectionView; 2、实现必须实现的DataSouce代理方法:(在该方法中返回整个CollectionView的数据数组用于重排) - (NSArray *)dataSourceArrayOfCollectionView:(XWDragCellCollectionView *)collectionView; 3、实现必须实现的一个Delegate代理方法:(在该方法中将重拍好的新数据源设为当前数据源)(例如 :_data = newDataArray) - (void)dragCellCollectionView:(XWDragCellCollectionView *)collectionView newDataArrayAfterMove

Android框架-Volley(三)

独自空忆成欢 提交于 2020-02-27 04:17:01
经过前面两篇文章的学习,我们已经掌握了Volley各种Request的使用方法,包括StringRequest、JsonRequest、ImageRequest等。其中StringRequest用于请求一条普通的文本数据,JsonRequest(JsonObjectRequest、JsonArrayRequest)用于请求一条JSON格式的数据,ImageRequest则是用于请求网络上的一张图片。 可是Volley提供给我们的Request类型就只有这么多,而我们都知道,在网络上传输的数据通常有两种格式,JSON和XML,那么如果想要请求一条XML格式的数据该怎么办呢?其实很简单,Volley提供了非常强的扩展机制,使得我们可以很轻松地定制出任意类型的Request,这也就是本篇文章的主题了。 1. 自定义XMLRequest 下面我们准备自定义一个XMLRequest,用于请求一条XML格式的数据。那么该从哪里开始入手呢?额,好像是有些无从下手。遇到这种情况,我们应该去参考一下Volley的源码,看一看StringRequest是怎么实现的,然后就可以模仿着写出XMLRequest了。首先看下StringRequest的源码,如下所示: /** * A canned request for retrieving the response body at a given URL

centos6.5安装nginx1.16.0

假装没事ソ 提交于 2020-02-27 03:21:39
参考: centos6.5安装nginx1.16.0 https://blog.csdn.net/weixin_37773766/article/details/80290939 nginx安装好后,无法通过ip进行访问 1.安装依赖环境 yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel 提示需要root权限,使用root权限安装完成: 2.下载nginx : wget https://nginx.org/download/nginx-1.16.0.tar.gz ,报错,在下载地址后面加上 --no-check-certificate后可以下载 默认保存到执行当前命令的路径下,即 /usr/local路径下 3.解压 tar zxvf nginx-1.16.0.tar.gz 4. 创建makefile   4.1创建临时目录:     mkdir /var/temp -p     mkdir /var/temp/nginx -p   4.2创建makefile:      进入nginx的解压目录 /usr/local/nginx-1.16.0, 执行下面的命令(设置参数): --prefix=/usr/local/nginx \ 指定了 nginx的安装目路径 .

两数相加

拟墨画扇 提交于 2020-02-27 02:12:13
两数相加 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 leetcode上面的题目 题目思路还是很简单的。 初始粗糙代码 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode l3 = new ListNode(-1); // ListNode l3 = head; int v1 , v2 , v3; boolean flag = false; boolean isHead = true; ListNode temp; while(l1!=null&&l2

洛谷P1484 种树 贪心+堆

你。 提交于 2020-02-26 23:08:24
题目链接:https://www.luogu.com.cn/problem/P1484 一开始看到这题,想到用DP来做,但是n<=50,000(实在是太大了)。所以就换个思路, 贪心 。 假设 k=1 即只种一棵树,那肯定种盈利最大的那个,设为 i ,盈利为a[i]。 若 k=2 要种两颗树了,此时我们只有两种选择,种 i 以及和它不相邻的那个坑,或者种 i 左右的两坑,即 i-1 与 i+1。因为,如果只种左右俩坑其中一个,肯定盈利比a[i]小,因为a[i]是一开始选得最大的那个。 有了这个结论,我们就可以合并 i-1 与 i+1。建一个大根堆,每次取出最大的那个,然后合并它的左右坑,使a[i]=a[i+1]+a[i-1]-a[i],重新入堆,如果已种了k个树或者再种盈利为负,就结束。 代码如下 # include <bits/stdc++.h> using namespace std ; typedef long long ll ; const int maxn = 5e5 + 5 ; struct node { int id ; ll value ; friend bool operator < ( node a , node b ) { return a . value < b . value ; } } ; priority_queue < node > q ; bool