magenta

LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置

只愿长相守 提交于 2020-08-16 15:22:21
我的LeetCode: https://leetcode-cn.com/u/ituring/ 我的LeetCode刷题源码[GitHub]: https://github.com/izhoujie/Algorithmcii LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置 题目 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是 \(O(log n)\) 级别。 如果数组中不存在目标值,返回 [-1, -1]。 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: [3,4] 示例 2: 输入: nums = [5,7,7,8,8,10], target = 6 输出: [-1,-1] 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解题思路 思路1-二分查找 一般二分查找只能确定一个位置,那么自然的会想到先确定target的最左位置然后while再确定最右位置; 但是这样算法就不是 \(logn

使用Java带你打造一款简单的外卖系统

☆樱花仙子☆ 提交于 2020-08-16 03:29:48
【一、项目背景】 随着互联网时代的快速发展,便捷人民的生活,提高生活质量,外卖系统应运而生。 人们也喜欢享受着“足不出户,美食到家”的待遇,促使网上订餐行业快速发展。 【二、项目目标】 1. 设计一款应用程序-外卖系统,有文字和图片显示,通过选择一种或多种食物,每种食物可以选择一份或多份,点击结算后,进行总价的统计。 2. 实现标题文字滚动和颜色定时变化。 3. 实现消费多少钱免配送费以及消费多少钱满减。 【三、项目实施】 使用eclipse软件开发,先上效果图,如下图所示。 可以看到在界面上有文字和图片显示,通过选择一种或多种食物,每种食物可以选择一份或多份,结算功能,标题文字滚动加颜色变化的功能。 接下来,小编带大家进行具体的实现,具体的实现步骤如下。 【四、实现步骤】 一、首先实现外卖系统购物车的窗口 public static void main(String[] args) { // TODO Auto-generated method stub Takeout t = new Takeout(); t.setTitle("饶洋外卖"); t.setSize(720,550); t.setVisible(true); } 使用new关键字创建Takeout类; setTitle表示设置界面的标题; setSize(宽,高)表示窗体大小; setVisible

LeetCode 104. 二叉树的最大深度

假装没事ソ 提交于 2020-08-16 01:51:01
我的LeetCode: https://leetcode-cn.com/u/ituring/ 我的LeetCode刷题源码[GitHub]: https://github.com/izhoujie/Algorithmcii LeetCode 104. 二叉树的最大深度 题目 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度 3 。 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/maximum-depth-of-binary-tree 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解题思路 思路1-递归计算最深的子树 思路解析:因为树的深度是以最底层的叶子节点计算的,所以递归计算左右子树,若不是叶子节点就将深度+1并递归处理,由于左右子树都在递归,所以要求两者的最大值; 步骤: 左右子树递归,递归时,遇到非叶子节点就将深度+1并递归下层节点; 最终返回左右子树深度值较大的即为树的最大深; 算法复杂度: 时间复杂度: $ {\color{Magenta}{\Omicron\left(n\right

字符串数据脱敏以及与日志框架logback的集成(日志脱敏)

…衆ロ難τιáo~ 提交于 2020-08-15 16:51:44
字符串数据脱敏框架 可选择唯品会的工具: https://github.com/vipshop/vjtools/blob/master/vjkit/docs/data_masking.md 也可以自定义,用正则或者其他方式(如:commons-lang3#StringUtils) 与logback集成 分析: 由于logback的api和语法多种多样( http://logback.qos.ch/manual/architecture.html , 如下),导致在logback级别处理数据脱敏不太方便,为了保持日志框架原本自由的使用方式,所以在调用前处理日志脱敏,且注意加上必要的日志打印判断提高性能。 logback基本语法: String message = "This is a message."; logger.info(message); logger.info("This is a message"); String param = "some variable"; logger.info("This is a message. {}", param); String param1 = "some variable1"; String param2 = "some variable2"; logger.info("This is a message. {} {}",

LeetCode 136. 只出现一次的数字

断了今生、忘了曾经 提交于 2020-08-14 13:53:33
我的LeetCode: https://leetcode-cn.com/u/ituring/ 我的LeetCode刷题源码[GitHub]: https://github.com/izhoujie/Algorithmcii LeetCode 136. 只出现一次的数字 题目 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1] 输出: 1 示例 2: 输入: [4,1,2,1,2] 输出: 4 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/single-number 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解题思路 思路1-利用异或运算解决 利用位运算中异或运算的特性: bit位不同异或结果为1,否则为0; 任意数与本身异或为0; 任意数与0异或为其本身; 一个例子,不使用额外变量,利用异或运算交换两个值: public static void swap(int x, int y) { System.out.println("x=" + x); System.out.println("y=" + y); // 任意数与本身异或为0

Fuchsia OS 要取代 Android?小论Google Fuchsia OS的通用性

a 夏天 提交于 2020-08-14 01:05:48
一笔由欧盟开出、面向 Google 的高达 43.4 亿欧元的创纪录罚单,让 Android 操作系统再次成为舆论场上的焦点。欧盟指责 Google 在 Android 上捆绑 Chrome,限制其他厂商对 Android 进行定制,而且还付费推广 Google Search app。Google 当然对此表示抗议,Sundar Pichai 在官网警告称:由于欧盟的决定,Android 未来可能无法保持免费。 然而,Android 未来所面临的问题,可能不仅仅是不再免费那么简单;在彭博社于 7 月 19 日发布的文章话语中,Android 似乎还面临着被取代的命运,继任者是 Google 旗下的另外一款操作系统 Fuchsia OS, 而且甚至已经有了时间表——就在五年内。 不过在雷锋网看来,一切并没有那么容易。 关于 Fuchsia OS 的一些真相 ——Google 的 Flutter SDK 与 Dart 程序语言的通用性 在探讨 Google 的 Flutter SDK 与 Dart的来龙去脉之前,首先要明确一点,自 Fuchsia OS 诞生以后,关于它将要取代 Android 和 Chrome OS 的声音就从来没有停止过,而且基本上变成了月经贴——这在一定程度上说明了外界的一厢情愿,但实质上,Google 官方没有任何关于 Fuchsia OS 要取代

LeetCode 面试题33. 二叉搜索树的后序遍历序列

不问归期 提交于 2020-08-13 23:04:20
我的LeetCode: https://leetcode-cn.com/u/ituring/ 我的LeetCode刷题源码[GitHub]: https://github.com/izhoujie/Algorithmcii LeetCode 面试题33. 二叉搜索树的后序遍历序列 题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树: 5 / \ 2 6 / \ 1 3 示例 1: 输入: [1,6,3,2,5] 输出: false 示例 2: 输入: [1,3,2,6,5] 输出: true 提示: 数组长度 <= 1000 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-hou-xu-bian-li-xu-lie-lcof 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解题思路 思路1-分治递归 后序遍历:left->right->root; 因此,数组的最后一个元素是根节点,而数组的前一部分是左子树,后一部分是右子树; 那么,根据搜索二叉树的特性,左子树都小于根节点,右子树都大于根节点,依此校验即可;

LeetCode 53. 最大子序和

好久不见. 提交于 2020-08-11 07:07:14
我的LeetCode: https://leetcode-cn.com/u/ituring/ 我的LeetCode刷题源码[GitHub]: https://github.com/izhoujie/Algorithmcii LeetCode 53. 最大子序和 题目 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/maximum-subarray 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解题思路 思路1-累加和,当和为正数时继续累加,为负数时则从遇到的下一个正数开始累加 思路解析:正数累加过程的曲线有点像下图: 只要保证sum一直为正数并累加,那么一定可以得到一个最大连续累加和; 代码给出了两种风格写法; 算法复杂度: 时间复杂度: $ {\color{Magenta}{\Omicron\left(n\right)}} $ 空间复杂度: $ {\color{Magenta}{

LeetCode 69. x 的平方根

ぃ、小莉子 提交于 2020-08-11 05:39:47
我的LeetCode: https://leetcode-cn.com/u/ituring/ 我的LeetCode刷题源码[GitHub]: https://github.com/izhoujie/Algorithmcii LeetCode 69. x 的平方根 题目 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/sqrtx 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解题思路 思路1-直接顺序计算 对x折半,然后从1至x/2求平方; 可以AC,但效率低; 算法复杂度: 时间复杂度: $ {\color{Magenta}{\Omicron\left(x\right)}} $ 空间复杂度: $ {\color{Magenta}{\Omicron\left(1\right)}} $ 思路2-牛顿法 略... 算法复杂度: 时间复杂度: $ {\color{Magenta}{\Omicron

LeetCode 面试题 01.02. 判定是否互为字符重排

一曲冷凌霜 提交于 2020-08-11 02:16:27
我的LeetCode: https://leetcode-cn.com/u/ituring/ 我的LeetCode刷题源码[GitHub]: https://github.com/izhoujie/Algorithmcii LeetCode 面试题 01.02. 判定是否互为字符重排 题目 给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。 示例 1: 输入: s1 = "abc", s2 = "bca" 输出: true 示例 2: 输入: s1 = "abc", s2 = "bad" 输出: false 说明: 0 <= len(s1) <= 100 0 <= len(s2) <= 100 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/check-permutation-lcci 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解题思路 思路1-字符转int,用数组统计 将字符转为int,用数组统计,前者++后者--; 最后对数组遍历,若全为0则说明可重排; 算法复杂度: 时间复杂度: $ {\color{Magenta}{\Omicron\left(n\right)}} $ 空间复杂度: $ {\color{Magenta}{