数组

【LeetCode-数组】删除排序数组中的重复项

六眼飞鱼酱① 提交于 2020-04-06 23:59:54
题目描述 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 示例: 给定 nums = [0,0,1,1,1,2,2,3,3,4], 函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。 你不需要考虑数组中超出新长度后面的元素。 题目链接: https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/ 思路 做这题之前可以先做一下 移除元素 。使用一快一慢两个指针,i为慢指针,j为快指针,都从数组头开始遍历。如果nums[i]==nums[j],则j++,继续遍历下一个元素。如果nums[i]!=nums[j],则说明找到了不同的元素,因为重复的元素要保留一个,所以先将i+1后赋值,也就是nums[++i]=nums[j],当j遍历完毕时,当前数组的长度为i+1.代码如下: class Solution { public: int removeDuplicates(vector<int>& nums) { if(nums.empty()) return 0; int i=0, j=0; int curLen

GO语言数组和切片实例详解

☆樱花仙子☆ 提交于 2020-04-06 23:10:26
一、数组   与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列。 (1)数组的创建。 数组有3种创建方式:[length]Type 、[N]Type{value1, value2, ... , valueN}、[...]Type{value1, value2, ... , valueN} 如下: 复制代码 代码如下: func test5() { var iarray1 [5]int32 var iarray2 [5]int32 = [5]int32{1, 2, 3, 4, 5} iarray3 := [5]int32{1, 2, 3, 4, 5} iarray4 := [5]int32{6, 7, 8, 9, 10} iarray5 := [...]int32{11, 12, 13, 14, 15} iarray6 := [4][4]int32{{1}, {1, 2}, {1, 2, 3}} fmt.Println(iarray1) fmt.Println(iarray2) fmt.Println(iarray3) fmt.Println(iarray4) fmt.Println(iarray5) fmt.Println(iarray6) } 结果: [0 0 0 0 0] [1 2 3 4 5] [1 2 3 4 5] [6 7 8 9 10] [11 12

Java 代码性能优化

試著忘記壹切 提交于 2020-04-06 14:04:23
代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。 代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的。 代码优化的目标是 减小代码的体积 提高代码运行的效率 代码优化细节 1、尽量指定类、方法的final修饰符 带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,则该类所有的方法都是final的。Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,具体参见Java运行期优化。此举能够使性能平均提高50%。 2、尽量重用对象 特别是String对象的使用,出现字符串连接时应该使用StringBuilder/StringBuffer代替

js中的类型转换

强颜欢笑 提交于 2020-04-06 12:57:05
“==”运算符(两个操作数的类型不相同时) 如果一个值是null,另一个值是undefined,则它们相等 如果一个值是数字,另一个值是字符串,先将字符串转换为数学,然后使用转换后的值进行比较。 如果其中一个值是true,则将其转换为1再进行比较。如果其中的一个值是false,则将其转换为0再进行比较。 如果一个值是对象,另一个值是数字或字符串,则将对象转换为原始值,再进行比较。 对象到数字的转换 如果对象具有valueOf()方法,后者返回一个原始值,则JavaScript将这个原始值转换为数字(如果需要的话)并返回一个数字。 否则,如果对象具有toString()方法,后者返回一个原始值,则JavaScript将其转换并返回。(对象的toString()方法返回一个字符串直接量(作者所说的原始值),JavaScript将这个字符串转换为数字类型,并返回这个数字)。 否则,JavaScript抛出一个类型错误异常。 空数组转换为数字0 数组继承了默认的valueOf()方法,这个方法返回一个对象而不是一个原始值,因此,数组到数学的转换则调用toString()方法。空数组转换为空字符串,空字符串转换为数字0. Boolean([]); //true Number([]); //0 Number({}); // NaN Number(false); //0 因此: console

数据结构概述

≡放荡痞女 提交于 2020-04-06 10:36:34
数据结构 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。 常用结构 数组: 在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。 栈: 是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。 队列: 一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列是按照“先进先出”或“后进后出”的原则组织数据的。队列中没有元素时,称为空队列。 链表: 是一种物理存储单元上非连续、非顺序的存储结构,它既可以表示线性结构,也可以用于表示非线性结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成

vue2.x学习笔记(六)

与世无争的帅哥 提交于 2020-04-06 09:23:06
接着前面的内容: https://www.cnblogs.com/yanggb/p/12571171.html 。 class与style绑定 操作元素的class列表和内联样式,是数据绑定的一个常见需求。因为它们都是属性,所以我们可以用【v-bind】指令去处理它们,只需要通过表达式计算出字符串的结果即可。不过,字符串拼接麻烦且易错。因此,在将【v-bind】指令用于class和style的时候,vue做了专门的增强。表达式结果的类型,除了字符串之外,还可以是对象或数组。 绑定class的对象语法 我们可以传一个对象给【v-bind:class】指令,以达到动态切换class的目的。 <div v-bind:class="{ active: isActive }"></div> 上面的语法,表示active这个class的存在与否,取决于数据属性isActive的truthiness。 那么,你也可以在对象中传入更多的属性来动态切换多个class。除此之外,【v-bind:class】指令也可以与普通的class属性共存。 <div class="static" v-bind:class="{ active: isActive, 'text-danger': hasError }"></div> data: { isActive: true, hasError: false }

flutter动态列表

大憨熊 提交于 2020-04-06 09:20:34
在前面一篇总结flutter里面的列表组件ListView的时候,一直都是使用的静态数据,但是在实际的运用过程中,数据都是从后台获取的动态数据,不能再像前面那样写静态数据了,下面模拟一下如果使用动态数据形成列表。 数组循环 首先循环一个数组,形成动态数据,需要注意的是,数组里的每一项都需要时Widget组件,所以,在循环数组的时候,需要带上Widget,另外,在循环构造完数据以后,一定要使用toList()将数据转为List。 import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { // TODO: implement build return MaterialApp( home: Scaffold( appBar: AppBar(title: Text('FlutterDemo')), body: HomeContent(), )); } } class HomeContent extends StatelessWidget { //自定义方法 List<Widget> _getData(){ List<Widget>

BZOJ2565: 最长双回文串

家住魔仙堡 提交于 2020-04-06 08:47:28
【传送门: BZOJ2565 】 简要题意:   给出一个串,求出一个最长的子串,满足能够分成两个回文串 题解:   这题,果断马拉车!!(Manacher)   首先对原串进行Manacher,然后同时记录两个数组:llen,rlen   llen[i]表示以第i位为开头的最长回文串的长度,rlen[i]表示以第i位为结尾的最长回文串的长度   这两个数组怎么得到呢?   假设当前对i点进行操作,那么p[i]假设已经求出来了,那么:   rlen[i-p[i]+1]=max(rlen[i-p[i]+1],p[i]-1)   llen[i+p[i]-1]=max(llen[i+p[i]-1],p[i]-1)   注意:因为我们在求Manacher的时候会将原字符串进行修改,然后得出来的p[i]-1之后才是原字符串的最长回文子串长度,所以我们llen和rlen记录的都是原长度   但是仅仅这样还不能求出准确的rlen,llen   我们还要将这两个数组往前往后问一下,假如之前得到的最长回文串长度-1比当前数组的值还大的话,也要更新   具体,代码解释 参考代码: #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #include<cmath> using namespace std;

PHP:implode(),emplode() 字符串数组,数组字符串转换函数

给你一囗甜甜゛ 提交于 2020-04-06 08:11:57
1.implode()-Join array elements with a string( 把数组元素组合为一个字符串。 ) string implode([string $separator,] array $arr) separator 可选,规定数组元素之间放置的内容。默认呢是""(空字符串)。 arr 必选。要结合为字符串的数组。 虽然 separator 参数是可选的。但是为了向后兼容,推荐您使用使用两个参数。 注释:implode()可以接收两种参数顺序。但由于历史原因,explode()是不行的,必须保证separator必须在string之前 例子: <?php $arr=array('Hello','World!','Beautiful','Day!'); echo implode('',$arr); ?> 输出: Hello World! Beautiful Day! 2.explode()-把字符串分割为数组 explode(separator,string, limit) separator ,必需。规定在哪里分割字符串。string ,必需。要分割的字符串。limit,可选。规定锁返回的数组元素的最大数目。 本函数返回由字符串组成的数组,其中的每个元素都是由 separator 作为边界点分割出来的子字符串。 separator 参数不能是空字符串。如果

js对象、数组转换字符串

佐手、 提交于 2020-04-06 08:10:20
对象转换成字符串需要使用toString()方法。 1 var a = function(){ 2 console.log(111); 3 }; 4 var b = a.toString(); 5 console.log(a); 函数式的function 6 console.log(b); 字符串function 7 console.log(typeof a); >>function 8 console.log(typeof b); >>string 数组转换字符串 1.0 1 var a = [1,2,3]; 2 var b = a.toString(); 3 console.log(a); >>[1,2,3] 4 console.log(b); >>"1,2,3" 当我们进行与原始值比较的时候,它们会自动调用toString方法。(+,-,!=,==都会进行转换。) 数组转换字符串 2.0 1 // var a = [1,2,3]; 2 // console.log(a.join()); >>1,2,3 toString()与join()的比较 1 // var a = [1,2,3]; 2 // console.log(a.join()); >>1,2,3 3 // console.log(a.toString()); >>1,2,3 4 // console.log(a