指针变量

【LeetCode】11. 盛最多水的容器 python实现

让人想犯罪 __ 提交于 2020-02-08 07:44:12
题目描述 解题思路 方法二:双指针法 算法 这种方法背后的思路在于,两线段之间形成的区域总是会受到其中较短那条长度的限制。此外,两线段距离越远,得到的面积就越大。 我们在由线段长度构成的数组中使用两个指针,一个放在开始,一个置于末尾。 此外,我们会使用变量 m a x a r e a maxarea m a x a r e a 来持续存储到目前为止所获得的最大面积。 在每一步中,我们会找出指针所指向的两条线段形成的区域,更新 m a x a r e a maxarea m a x a r e a ,并将指向较短线段的指针向较长线段那端移动一步。 这种方法如何工作? 最初我们考虑由最外围两条线段构成的区域。现在,为了使面积最大化,我们需要考虑更长的两条线段之间的区域。 如果我们试图将指向较长线段的指针向内侧移动,矩形区域的面积将受限于较短的线段而不会获得任何增加。 但是,在同样的条件下,移动指向较短线段的指针尽管造成了矩形宽度的减小,但却可能会有助于面积的增大。 因为移动较短线段的指针会得到一条相对较长的线段,这可以克服由宽度减小而引起的面积减小。 Python代码 class Solution ( object ) : def maxArea ( self , height ) : """ :type height: List[int] :rtype: int """ ans =

《go语言从入门到进阶实战》_徐波

痞子三分冷 提交于 2020-02-08 02:02:57
摘录 Go语言是Google公司开发的一种静态型、编译型并自带垃圾回收和并发的编程语言。 Go语言不使用虚拟机,只有运行时(runtime)提供垃圾回收和goroutine调度等。 Go语言使用自己的链接器,不依赖任何系统提供的编译器、链接器。因此编译出的可执行文件可以直接运行在几乎所有的操作系统和环境中。 从Go 1.5版本之后,Go语言实现自举,实现了使用Go语言编写Go语言编译器及所有工具链的功能。 Go语言可以利用自己的特性实现并发编译,并发编译的最小元素是包。从Go 1.9版本开始,最小并发编译元素缩小到函数,整体编译速度提高了20%。 Go语言的并发是基于goroutine,goroutine类似于线程,但并非线程。可以将goroutine理解为一种虚拟线程。Go语言运行时会参与调度goroutine,并将goroutine合理地分配到每个CPU中,最大限度地使用CPU性能。 在Go语言中,自增操作符不再是一个操作符,而是一个语句。因此,在Go语言中自增只有一种写法: i++ 如果写成前置自增“++i”,或者赋值后自增“a=i++”都将导致编译错误。 在多个短变量声明和赋值中,至少有一个新声明的变量出现在左值中,即便其他变量名可能是重复声明的,编译器也不会报错。 布尔型无法参与数值运算,也无法与其他类型进行转换。 切片发生越界时,运行时会报出宕机,并打出堆栈

指针的详解(C++)

試著忘記壹切 提交于 2020-02-08 01:37:51
1.指针的含义 内存单元的编号叫做地址(Address),也称为指针(Pointer)。 1 内存单元的指针和内存单元的内容是两个不同的概念,从下图可以理解: 2. 一个指针是一个地址,是一个常量。而一个指针变量可以被赋予不同的指针值,是变量。 现在我们用C++语言在深入了解一下指针和地址的关系 #include <iostream> using namespace std; int main(){ int a = 3; int b = 12; int* c; c = &a; int** d; d = &c; cout << &a << endl; cout << &b << endl; cout << &c << endl; cout << &d << endl; cout << *c << endl; cout << **d << endl; cout << *d << endl; //&a cout << &*d << endl; //&c cout << **&d << endl; //&a } 2.1 先梳理一下代码的流程,定义一个两个int类型的变量并初始化,定义一个一级指针和一个二级指针并初始化,最后就是指针的使用。如下图所示: 2.1.1 所有的常量都存在常量池中,内存中保存的的常量池中常量的地址,c内存单元放的是a的地址,d内存单元放的是c的地址。 2.2.1

刷题总结--两数之和系列

主宰稳场 提交于 2020-02-08 01:10:08
题目1–1:两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 来源:力扣(LeetCode) 思路1 暴力求解: 复杂度分析: 时间复杂度:O(n^2) 空间复杂度:O(1)。 代码 class Solution { public int [ ] twoSum ( int [ ] nums , int target ) { int i = 0 ; int res [ ] = { 0 , 0 } ; while ( i < nums . length ) { for ( int j = i + 1 ; j < nums . length ; j ++ ) { if ( nums [ j ] == target - nums [ i ] ) { res [ 0 ] = i ; res [ 1 ] = j ; } } i ++ ; } return res ; } } 思路2 思路基本一样,只是使用HashMap以空间换取速度的方式,我们可以将查找

C语言第三周

跟風遠走 提交于 2020-02-08 00:58:54
一. 字符串常量 只要有一对双引号括起来的字符序列就是字符串常量。列如“hello"接”123" 注意: “a"是字符串常量‘a'是字符常量。 二、字符串储存 字符串的结束标志是‘\0’。 列如: char str[6]={'h',‘e','l','l','o','0','\0'}; 三、学习过程中遇到的问题与解决 1、C语言中,为什么字符串可以赋值给字符指针变量? char *p,a='5'; p=&a; //显然是正确的, p="abcd" //但为什么也可以这样赋值? 问:一直理解不了为什么可以将字串常量赋值给字符指针变量,网上查资料学习了一下 答: 双引号做了3件事 : 1.申请了空间(在常量区),存放了字符串 2.在字符串尾加上了'/0' 3.返回地址 这里就是 返回的地址 赋值给了 p 二、char *p = “hello”; 上边的表达式为什么可以,而把p换成数组,然后再赋值就不行了 解释: 字符串常量"hello"出现在一个表达式中时,"hello"表达式使用的值就是这些字符所存储的地址(在常量区),而不是这些字符本身。 所以,可以把字符串赋值给指向字符的指针p,而不能把字符串赋值给一个字符数组。 char a[10] = “hello”; //这样可以,这种情况是c语言初始化所支持的 如果写成char a[10] 然后 a = “hello” 这样就错误了。

C++异常机制的分析

岁酱吖の 提交于 2020-02-07 22:02:39
找了很多资料发现这一篇文章写的最好,转载以下: https://blog.csdn.net/cqu20093154/article/details/44020043 ................................................................................................................................................................................... 进程和线程的概念相信各位看官早已耳熟能详。在这里,我只想带大家回忆几点重要概念: 一个进程中可以同时包含多个线程。 我们通常认为线程是操作系统可识别的最小并发执行和调度单位(不要跟俺说还有 Green Thread 或者 Fiber,OS Kernel 不认识也不参与这些物件的调度)。 同一进程中的多个线程共享代码段(代码和常量)、数据段(静态和全局变量)和扩展段(堆存储),但是每个线程有自己的栈段。栈段又叫运行时栈,用来存放所有局部变量和临时变量(参数、返回值、临时构造的变量等)。这一条对下文中的某些概念来说是非常重要的 。但是请注意,这里提到的各个“段”都是逻辑上的说法,在物理上某些硬件架构或者操作系统可能不使用段式存储。不过没关系

[C语言]指针与字符串

随声附和 提交于 2020-02-07 20:49:53
----------------------------------------------------------------------------- // main.c // Created by weichen on 15/2/1. // Copyright (c) 2015年 weichen. All rights reserved. #include <stdio.h> int main(int argc, const char * argv[]) { /*   取地址与获取大小:   1. 运算符sizeof可以给出某个类型或变量在内存中的字节数 2. scanf("%d", &a);里面的&为运算符;&用于获取变量的地址,其操作数必须是变量 3. &不能对没有的东西取地址,如:&(a++),&(++a);取地址符右边必须有一个变量   */ int a = 0; int b = (int)&a; //将a的地址强制类型转换为整型 printf("sizeof(a)=%ld\n", sizeof(a)); //4 printf("sizeof(int)=%ld\n", sizeof(int)); //4 //4. double变量在内存中占据的空间是int变量的两倍 //5. 地址的大小是否与int相同取决于编译器,取决于是32位还是64位架构,并不总是相同

双链表的基本操作---插入,删除,交,并,相邻元素的交换,不相邻元素的交换

你。 提交于 2020-02-07 15:42:52
这个链表是带有表头的双链表。实现链表的一些规范操作,初始化,插入,删除等。包括两个头文件list.h,fatal.h,库函数list.c,测试函数testlist.c。头文件放的都是函数声明,库函数list.c放的的函数的定义。 头文件list.h 1 typedef int ElementType; 2 #ifndef _List_H 3 struct Node; 4 typedef struct Node *PtrToNode; 5 typedef PtrToNode List; 6 typedef PtrToNode Position; 7 #include<stdbool.h> 8 List MakeEmpty(List L); 9 void DeleteList(List L); 10 bool IsEmpty(List L); 11 bool IsLast(Position P, List L); 12 Position Find(ElementType X, List L); 13 void Delete(ElementType X, List L); 14 void Insert(ElementType X, List L,Position P); 15 Position Header(List L); 16 Position First(List L); 17

c++中四种cast转化

梦想与她 提交于 2020-02-07 06:00:30
c++中四种cast转化 1.const_cast转化 const变量👉非const变量 •常量 指针 转化为非常量的指针,并且仍然指向原来的对象 •常量 引用 转化为非常量的引用,并且仍然指向原来的对象 (★const_cast只能改变运算对象的底层const,而对顶层const无能为力 ★const_cast不能改变表达式类型,只能改变常量属性) 1.去掉const常量const属性 const int g = 20; int h = const_cast<int >(&g); 2.去掉const引用const属性 const int g = 20; int &h = const_cast<int &>(g); 3.去掉const指针const属性 const char *g = “hello”; char *h = c onst_cast<char *>(g); 使用: 1.一个函数的参数不是const对象,并且编程者事先已经知道在这个函数中不会对参 数进行修改,但需要传递的实参却是已经定义好的const对象。为了成功调用这个函数,就需要利用到const_cast在实参传递前对其进行处理,从而使函数能够成功接收这个实参 # include <iostream> using namespace std ; void Function ( int * val ) { cout <

函数参数回传

旧巷老猫 提交于 2020-02-07 04:53:30
定义一个变量,取其地址传进函数内。 函数内定义一指针变量,将要传的值赋给该指针变量即可。 来源: CSDN 作者: weixin_37875741 链接: https://blog.csdn.net/weixin_37875741/article/details/104200896