Fork me on GitHub

MacOS IDEA配置scala

1.前提:

  • scala已经在mac本地安装:

2.新建项目后,点击项目,右键,点击Add Framwork Support

3.找到scala,刚开始时“scala-dk-2.11.8”是没有的,需要自己找

所以点击create,再点击Browe…

4.来到自己安装scala的目录。选择scala-2.11.8目录下的lib目录,点击open,即可

5.点击ok

6.点击file->Project Structure

7.选择module

8.在main,新建一个scala目录,点击Source.即可在Scala目录中写scala代码了:

MacOS安装scala

1.下载安装包:

下载地址:http://www.scala-lang.org/download/
下载

2.将下载好的scala压缩包解压到目录:

1
tar -zxvf scala-2.13.1.tgz -C /Users/macbook/Documents/scala

解压

3.配置环境变量:

1
vi ~/.bash_profile

添加内容:

1
2
3
export SCALA_HOME=/Users/macbook/Documents/scala/scala-2.13.1

export PATH=$PATH:$SCALA_HOME/bin

image.png

使环境变量生效

1
source ~/.bash_profile

 使环境变量生效

4.验证:

1
scala

验证

[LeetCode-面试01.07]旋转矩阵

一.题目

给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。
不占用额外内存空间能否做到?

示例 1:
给定 matrix =
[[1,2,3],
[4,5,6],
[7,8,9]],
原地旋转输入矩阵,使其变为:
[[7,4,1],
[8,5,2],
[9,6,3]]

示例 2:
给定 matrix =
[[ 5, 1, 9,11],
[ 2, 4, 8,10],
[13, 3, 6, 7],
[15,14,12,16]],
原地旋转输入矩阵,使其变为:
[[15,13, 2, 5],
[14, 3, 4, 1],
[12, 6, 8, 9],
[16, 7,10,11]]

二.题解

1.第一种方法:

(1)解题思路:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
* 方法一
* 首先根据矩阵martix的对角线{1,5,9}进行翻转
* {{1,2,3},
* {4,5,6},
* {7,8,9}}
* 转换为
* {{1,4,7},
* {2,5,8},
* {3,6,9}}
* 即外层循环,以i为下标,从0开始,遍历到n-1
* 内存循环,一j=i+1开始,遍历到n-1
* 进行matrix[i][j]与matrix[j][i]互换
* 再根据每一行的中点进行翻转
* 即转换为
* {{7,4,1},
* {8,5,2},
* {9,6,3}}
* 即外层循环,以i=0为开始下表,遍历到n-1
* 内层循环以j-0为开始下标,遍历到n/2-1
* 进行martix[i][j]与matrix[i][n-j-1]互换
* 循环结束则旋转结束
*/
(2)代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static void rotate(int[][] matrix){

int n =matrix.length;

for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
int tmp=matrix[i][j];
matrix[i][j]=matrix[j][i];
matrix[j][i]=tmp;
}
}
int mid = n/2;

for(int i=0;i<n;i++){
for(int j=0;j<mid;j++){
int tmp = matrix[i][j];
matrix[i][j]=matrix[i][n-j-1];
matrix[i][n-j-1]=tmp;
}
}
}

[LeetCode-面试01.06]字符串压缩

一.题目:

字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)

示例1:
输入:”aabcccccaaa”
输出:”a2b1c5a3”

示例2:
输入:”abbccd”
输出:”abbccd”
解释:”abbccd”压缩后为”a1b2c2d1”,比原字符串长度更长。

二.题解:

1.第一种方法:双指针法

在这里插入图片描述

(1)解题思路:
  • 新建两个指针i,j
  • 新建一个StringBuilder sb
  • 利用while循环,i为下表=标,从0开始遍历字符串S
  • 令j=i;
  • 判定字符串的第j的元素是否与第i个元素是否相等
  • 若相等,则j指向下一位
  • 否则将S的第i个元素添加到sb中
  • 再将j-i 即重复字符的个数添加到sb中,
  • 再将i指针指向j,进行下一个循环
  • 循环结束后,将sb转换为String类型的字符串result
  • 比较result和S的长度,返回较短的字符串
  • 结束
(2)代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/**
* 解法一 双指针法
* 新建两个指针i,j
* 新建一个StringBuilder sb
* 利用while循环,i为下表=标,从0开始遍历字符串S
* 令j=i;
* 判定字符串的第j的元素是否与第i个元素是否相等
* 若相等,则j指向下一位
* 否则将S的第i个元素添加到sb中
* 再将j-i 即重复字符的个数添加到sb中,
* 再将i指针指向j,进行下一个循环
* 循环结束后,将sb转换为String类型的字符串result
* 比较result和S的长度,返回较短的字符串
* 结束
*/
public static String compressString(String S){
int j;
int i=0;
int N = S.length();
StringBuilder sb = new StringBuilder();

while(i<N){
j=i;
while(j<N && S.charAt(i)==S.charAt(j)){
j++;
}

sb.append(S.charAt(i));
sb.append(j-i);
i=j;
}

String result = sb.toString();

if(result.length()<S.length()){
return result;
}else {
return S;
}
}

[LeetCode-面试01.05]一次编辑

一.题目:

字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。

1
2
3
4
5
6
7
8
9
10
11
示例 1:
输入:
first = "pale"
second = "ple"
输出: True

示例 2:
输入:
first = "pales"
second = "pal"
输出: False

二.题解

1.第一种解法:

(1)解题思路
  • 首先验证两个字符串字符个数是否相差小于等于1,否则返回false
  • 判定first是否为长字符串,否则将first替换为长字符串,保障first为长字符串
  • 利用循环,判定字符串字符是否一样,若判定不一样,则跳过不同的字符串,截取长字符串frist的i+1位后的字符串,
  • 若frist字符串长度与second字符串的长度相同,则截取second的第i+1位后的字符串,否则截取second的第i为字符串
  • 判定截取后的frist的与second字符串是否相同,相同则返回true,否则返回false
(2)代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/**
* 解题思路
* 首先验证两个字符串字符个数是否相差小于等于1,否则返回false
* 判定first是否为长字符串,否则将first替换为长字符串,保障first为长字符串
* 利用循环,判定字符串字符是否一样,若判定不一样,则跳过不同的字符串,截取长字符串frist的i+1位后的字符串,
* 若frist字符串长度与second字符串的长度相同,则截取second的第i+1位后的字符串,否则截取second的第i为字符串
* 判定截取后的frist的与second字符串是否相同,相同则返回true,否则返回false
*/

public static boolean oneEditAway(String first,String second){

int len1 = first.length()
int len2 = second.length();

if(Math.abs(len1-len2)>1){
return false;
}

if(len2>len1){
String tem = first;
first=second;
second=tem;
}
int l1=first.length();
int l2= second.length();

for(int i=0;i<l2;i++){
if(first.charAt(i) != second.charAt(i)){
return first.substring(i+1).equals(second.substring(l1==l2?i+1:i));
}else {
return true;
}
}
return true;
}

[LeetCode-面试01.04]回文排列

一.题目:

给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。
回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。
回文串不一定是字典当中的单词。

1
2
3
示例1:
输入:"tactcoa"
输出:true(排列有"tacocat"、"atcocta",等等)

二.题解:

1.第一种题解:

(1)解题思路:
  • 每个字符出现的次数为偶数, 或者有且只有一个字符出现的次数为奇数时, 是回文的排列; 否则不是
  • 利用HashSet中的元素不重复性质来判定
  • 将字符串s转换成字符数组c1
  • 新建一个HashSet set
  • 利用循环将c1中的元素添加进set中
  • 若添加成功,则说明之前没有添加,即第一次添加
  • 若添加失败,则证明该元素在之前就已经添加过,所以将该元素移除即可
  • 循环结束后,若set的元素个数为0或者1,则证明该字符串符合条件
  • 否则不符合
(2)代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
* 思路:
* 每个字符出现的次数为偶数, 或者有且只有一个字符出现的次数为奇数时, 是回文的排列; 否则不是
* 利用HashSet中的元素不重复性质来判定
* 将字符串s转换成字符数组c1
* 新建一个HashSet set
* 利用循环将c1中的元素添加进set中
* 若添加成功,则说明之前没有添加,即第一次添加
* 若添加失败,则证明该元素在之前就已经添加过,所以将该元素移除即可
* 循环结束后,若set的元素个数为0或者1,则证明该字符串符合条件
* 否则不符合
*/
public static boolean canPermutePalindrome(String s) {

Set<Character> set = new HashSet<Character>();

char[] c1 = s.toCharArray();

for(char c:c1){
if(!set.add(c)){
set.remove(c);
}
}
return set.size()<=1;
}

[LeetCode-面试01.01]判断字符是否唯一

一.题目描述:

实现一个算法,确定一个字符串 s 的所有字符是否全都不同。

1
2
3
4
5
6
7
8
9
10
11
示例 1:
输入: s = "leetcode"
输出: false

示例 2:
输入: s = "abc"
输出: true

限制:
0 <= len(s) <= 100
如果不使用额外的数据结构,会很加分

二.题解

1.第一种方法

(1)解题思路
  • 第一次遍历字符串所有字母;
  • 第二次遍历从第一次遍历的后一位开始;
  • 判断两次遍历的字母是否相等,一旦相等则返回false;
  • 默认返回true
(2).代码:
1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
public boolean isUnique(String astr) {
for (int i = 0; i < astr.length() - 1; i++) {
for (int j = i + 1; j < astr.length(); j++) {
if (astr.charAt(i) == astr.charAt(j)) {
return false;
}
}
}
return true;
}
}

2.方法二

(1)解题思路:
  • 利用set集元素不同的性质判定
  • 将String中的字符添加到set集中
  • 遍历结束后,若set集的大小和String集合的长度相同,则证明不重复
  • 否则有重复元素
(2)代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static boolean isUnique2(String astr) {

Set set = new HashSet();

for (int i = 0; i < astr.length(); i++) {
set.add(astr.charAt(i));
}

if (set.size() == astr.length()) {
return true;
} else {
return false;
}
}

[LeetCode-面试01.03]URL化

一.题目描述:

URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)

1
2
3
4
5
6
7
8
9
10
示例1:
输入:"Mr John Smith ", 13
输出:"Mr%20John%20Smith"

示例2:
输入:" ", 5
输出:"%20%20%20%20%20"

提示:
字符串长度在[0, 500000]范围内。

二.题解

1.方法一

(1)解题思路:
  • 新建一个StringBuilder sb
  • 用for循环遍历,结束条件是小于length
  • 遍历字符串S的第i个字符
  • 当字符为空格时,sb新增元素%20
  • 否则将S的第i个元素加到sb后面
  • 循环结束,将sb转化为String返回即可
(2)代码:
1
2
3
4
5
6
7
8
9
10
11
12
public static String replaceSpaces(String S,int length){
StringBuilder sb = new StringBuilder();

for(int i=0;i<length;i++){
if(S.charAt(i)==' '){
sb.append("%20");
}else {
sb.append(S.charAt(i));
}
}
return sb.toString();
}

2.方法二:

(1)解题思路:
  • 已知字符串后面是空格,,所以将要转化的字符串除了后面的截取
  • 然后再将截取后的字符串中的空格替换为%20即可
(2)代码:
1
2
3
4
5
public static String replaceSpaces2(String S,int length){
String s1 = S.substring(0,length);
String s2 = S.replaceAll(" ","%20");
return s2;
}

[LeetCode-面试01.02]判断是否互为字符重排

一.题目描述

给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。

1
2
3
4
5
6
7
8
9
10
11
示例 1:
输入: s1 = "abc", s2 = "bca"
输出: true

示例 2:
输入: s1 = "abc", s2 = "bad"
输出: false

说明:
0 <= len(s1) <= 100
0 <= len(s2) <= 100

二.题解

1.解法一:

(1)解题思路:
  • 现将s1,s2字符串转换为字符数组c1,c2
  • 再将数组c1,c2进行排序
  • 再将数组c1,c2转换为字符串
  • 再利用equal函数比较两个字符串是否相同即可
(2)Java代码实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public boolean CheckPermutation(String s1, String s2) {
//1.将字符串转换成数组
char[] charArray1 = s1.toCharArray();
char[] charArray2 = s2.toCharArray();

//若两个字符串的长度不同,则肯定不能重排
if(s1.length() != s2.length()){
return false;
}

//给数组排序
Arrays.sort(charArray1);
Arrays.sort(charArray2);

//将数组重新转换为字符串
String c1 = String.copyValueOf(charArray1);
String c2 = String.copyValueOf(charArray2);

//比较两个字符串是否相等
if(c1.equals(c2)){
return true;
}else{
return false;
}
}

Kafka实战-消费者组案例

1.需求:

测试同一个消费者组中的消费者,同一时刻只能有一个消费者消费。

2.案例实操

(1)在hadoop2、hadoop3上修改/opt/module/kafka-2.11/config/consumer.properties配置文件中的group.id属性为任意组名。

1
2
3
vi consumer.properties

group.id=movle

(2)再hadoop3、hadoop4上分别启动消费者

1
2
3
./bin/kafka-console-consumer.sh --bootstrap-server hadoop2:9092 --topic topic0519 --consumer.config config/consumer.properties

./bin/kafka-console-consumer.sh --bootstrap-server hadoop2:9092 --topic topic0519 --consumer.config config/consumer.properties

(3)在hadoop2上启动生产者

1
2
bin/kafka-console-producer.sh --broker-list hadoop2:9092 --topic topic0519
>hello world

(4)查看bigdata11和bigdata12的接收者。
同一时刻只有一个消费者接收到消息。

hadoo2生产者

hadoop3消费者

hadoop4消费者

  • Copyrights © 2015-2021 Movle
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信