指针

面试题 58.1:翻转单词顺序列

别来无恙 提交于 2020-02-29 00:26:45
题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 思路 先把句子中的所有字符进行翻转,再翻转每个单词中字符的顺序。 翻转每个单词时,添加两个指针,分别指向单词的第一个字符和单词的最后一个字符。 当第一个指针指向空格时,两个指针都前进一步。 否则判断第二个指针是是否到单词的最后一个字符了,到了则翻转,之后将两个指针分别前进一步指向空格。 否则说明还没到单词结尾,第二个指针继续前进一步。 这里第二个指针判断时需要注意索引越界以及是否已到结尾。 代码 public class Solution { public String ReverseSentence(String str) { if (str == null || str.length() == 0) { return ""; } // 如果就是一个单词,不是句子 if (!str.contains("")) { return str; } char[] charArray = str.toCharArray(

C++字符串、向量和数组知识概要总结

China☆狼群 提交于 2020-02-28 22:26:07
字符串 记一下string的几种没用过的初始化操作,赋值不能这么搞 string s1("value"); string s2(s1); string s3(6,'z'); string s4=string(6,'a'); 上面没咋提拷贝初始化,带等号的都是拷贝初始化,这里都是直接初始化 getline(cin, line); 可接受句子,遇到换行符则停止, 并且换行符也会被读入,但是这个换行符又被丢弃了 while(getline(cin, line)){ cout << line << endl; } while(cin>>line){ cout << line << endl; } 从上述两个例子里可以看出getline确实读入了换行符而且确实又把它给丢弃了。 注意注意注意!! string.size()这个函数返回的值的类型并不是int,而是string::size_type类型的,并且非常值得注意的是这个类型他是无符号类型的,用这个直接带入一些式子中可能会有意想不到的结果的; 尤其要注意的是s.size()<n这样的结构。~!! 关于string大小的判断,比较第一对相异的字符大小即可,若没有相异的,谁长谁大,或者就是相等 可以用字符字面值和字符串字面值转换成string 当string对象和字符字面值以及字符串字面值混在一起使用是,必须确保加号两边至少一个是string

指针与引用的区别

此生再无相见时 提交于 2020-02-28 22:16:39
标题 :指针与引用的区别 首先,函数参数有三种。一是传值,二是传地址,三是传引用。 传值,简单的来说,就是复制这个值,然后将复制体传到子函数中,对于其任何改变,其本身并不会变化。 传地址,就是将该变量的门牌号传给子函数,在子函数中对于其改变,本身也变化。 传引用,粗暴地说就是取小名。两个变量名指的是同一变量。改变时相互的。 是指针是C语言的精华,引用是C++对C语言的扩充。 首先来看指针。 # include <stdio.h> void swap ( int * a , int * b ) ; int main ( ) { int a = 3 , b = 4 ; swap ( & a , & b ) ; printf ( " a = %d ,b = %d" , a , b ) ; return 0 ; } void swap ( int * a , int * b ) { int temp ; temp = * a ; * a = * b ; * b = temp ; } 再来看引用 # include <iostream> using namespace std ; void swap ( int & a , int & b ) ; int main ( ) { int m = 3 , n = 4 ; swap ( m , n ) ; cout << "m=" << m <<

LeetCode 四数之和

时光怂恿深爱的人放手 提交于 2020-02-28 21:51:22
文章目录 四数之和 题目 解题思路 代码实现 实现结果 四数之和 题目来源: https://leetcode-cn.com/problems/4sum 前言:本题的主要思路,与 LeetCode | 15. 三数之和 此题的思路相似,可以借鉴思考。下面的链接内容是往期关于 LeetCode | 15. 三数之和 的解法。 LeetCode 三数之和 题目 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。 注意: 答案中不可以包含重复的四元组。 示例: 给定数组 nums = [ 1, 0, -1, 0, -2, 2 ] ,和 target = 0。 满足要求的四元组集合为: [ [ -1, 0, 0, 1 ] , [ -2, -1, 1, 2 ] , [ -2, 0, 0, 2 ] ] 解题思路 思路:数组排序和双指针; 先对特殊情况进行判断,若是 nums 为空(或None) 或者 nums 数组的长度 nl 小于 4,返回空列表; 先对数组进行排序; 返回的结果列表中不会有重复的四元组。在这个前提下,对数组进行遍历(从 0 开始,取 nl -3 个数, 最终需取 4 个元素,且不重复,取到第 nl -

剑指Offer刷题总结

你。 提交于 2020-02-28 21:50:31
1. 二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路题 从右上角或者左下角开始缩小范围。 2. 替换空格 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 语法题 3. 从尾到头打印链表 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 头插法 数组反转 栈 递归 4. 重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 递归 API:Arrays.copyOfRange() 5. 用两个栈实现队列 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 简单题 6. 旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5

Effective C++: const

 ̄綄美尐妖づ 提交于 2020-02-28 20:59:43
关于const: 1, 只有在使用 指针 的时候我们才说const分为 顶层(top)const 和 底层(bottom)const. 2, 右值引用你还用const你有毒吧. 3, 如果是两个指针之间相互拷贝其 底层(bottom)const 起到很关键的作用. #include <iostream> int main() { int n = 10; //no const; const int n1 = 10; //just const; const int& n2 = 10; //just const; const int* ptr1 = nullptr; //bottom-const; int* const ptr2 = nullptr; //top-const; const int* const ptr3 = nullptr; //bottom and top-const; //case 0: const int& number1 = 10; //number的类型为: const int&; const int number2 = 10; //number2的类型为: const int; //case 1: int n1_ = n1; //ok; int n2_ = n2; //ok; //int* ptr1_ = ptr; //error! 不能从 const int

C++的强制类型转换

拜拜、爱过 提交于 2020-02-28 19:18:08
c/c++强制类型转换 Q:什么是C风格转换?什么是static_cast, dynamic_cast 以及 reinterpret_cast?区别是什么?为什么要注意? A:转换的含义是通过改变一个变量的类型为别的类型从而改变该变量的表示方式。为了类型转换一个简单对象为另一个对象你会使用传统的类型转换操作符。比如,为了转换一个类型为doubole的浮点数的指针到整型: 代码: int i; double d; i = (int) d;或者:i = int (d); 对于具有标准定义转换的简单类型而言工作的很好。然而,这样的转换符也能不分皂白的应用于类(class)和类的指针。ANSI-C++标准定义了四个新的转换符:'reinterpret_cast', 'static_cast', 'dynamic_cast' 和 'const_cast',目的在于控制类(class)之间的类型转换。 代码: reinterpret_cast<new_type>(expression) dynamic_cast<new_type>(expression) static_cast<new_type>(expression) const_cast<new_type>(expression) 1 reinterpret_cast reinterpret_cast 转换一个指针为其它类型的指针

php面试笔记(7)-php基础知识-文件及目录处理考点

亡梦爱人 提交于 2020-02-28 17:04:51
本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 在面试中,考官往往喜欢基础扎实的面试者,而文件及目录处理相关的考点,往往是大家容易忽视的一个点,今天冷月就来帮各位小伙伴们梳理一下,在面试中文件及目录处理相关的注意点。 回顾真题 不断在文件hello.txt头部写入一行"Hello world"字符串,要求代码完整 答案: <?php /** * Created by 冷月小白. * 微信公众号: 学长冷月 */ $file = './hello.txt'; $handle = fopen($file,'r'); //以只读的方式打开文件,指针指向文件开头 $content = fread($handle,filesize($file)); //将文件全部读出 var_dump($content); $content = "Hello World\n" . $content; //拼接字符串 fclose($handle); //关闭文件 $handle = fopen($file,'w'); //以只写的方式打开文件,指针指向文件开头 fwrite($handle,$content); //写入 fclose($handle);//关闭文件 ?> 考点分析 文件的读取/写入操作

[LeetCode] 159. Longest Substring with At Most Two Distinct Characters

ぃ、小莉子 提交于 2020-02-28 13:13:56
最多有两个不同字符的最长子串。题意是给一个字符串,请返回一个最长子串的长度。子串的要求是最多只有两个不同的字母。例子, Example 1: Input: "eceba" Output: 3 Explanation: tis "ece" which its length is 3. Example 2: Input: "ccaabbb" Output: 5 Explanation: tis "aabbb" which its length is 5. 这题依然是用到sliding window的思想。给左右两个指针,并且创建一个hashmap,key是遍历到的字母,value是字母最后一次出现位置的index。扫描的时候,一开始只让右指针移动,把遍历到的字母和当前的坐标值加入hashmap。此时最大子串的长度就是左右指针的间距。当右指针遍历到第三个不同字母的时候,需要扫描hashmap,找到value(记为leftmost)最小的那个key并且删除这个键值对。此时左指针的位置是leftmost + 1。 时间O(n) 空间O(1) - 虽然有hashmap但是size很小,只有26个字母 1 /** 2 * @param {string} s 3 * @return {number} 4 */ 5 var lengthOfLongestSubstringTwoDistinct =

C Primer Plus 第9章 函数 9.7 指针简介

坚强是说给别人听的谎言 提交于 2020-02-28 11:46:51
一般来讲, 指针是一个其数值为地址的变量 (或更一般地说是 一个数据对象 )。 正如char类型的变量用字符作为其数值,而int类型变量的数值是整数,指针变量的数值表示的是地址。 如果您将某个指针变量命名为ptr,就可以使用如下语句: ptr=&pooh; /*把pooh的地址赋给ptr*/ 对于这个语句, 我们称ptr指向pooh 。 ptr和&pooh的区别在于前者为一变量,而后者是一个常量。 当然,ptr可以指向任何地方: ptr=%bah; /*令ptr指向bah而不是pooh*/ 这时,ptr的值是bah的地址。 要创建一个指针变量,首先需要声明其类型。假设您想把ptr声明为可以存放一个int数值的地址,就需要 使用下面介绍的新运算符。 9.7.1 间接运算符 假定ptr指向bah,如下所示: ptr = &bah; 这时就可以 使用间接(indirection)运算符*(也称作取值(dereferencing))来获取bah中存放的数值 (不要把这种一元运算符和表示乘法的二元运算符*相混淆)。 val = *ptr; /*得到ptr指向的值*/ 语句ptr=&bah;以及语句val=*ptr;放在一起等同于下面的语句: val = bah; 由此看出,使用地址运算符和间接运算符可以间接完成上述语句的功能,这也正是“间接运算符”名称的由来。 9.7.2 指针声明