Leetcode面T10(1-9)数组,2021年是意义非凡的一年

}

}

Q10.2 合并排序的数组

编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。变位词是指字母相同,但排列不同的字符串。

注意:本题相对原题稍作修改

示例:

输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],

输出:

[

[“ate”,“eat”,“tea”],

[“nat”,“tan”],

[“bat”]

]

说明:

所有输入均为小写字母。

不考虑答案输出的顺序。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/group-anagrams-lcci

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

public class Solution {

public List<List> groupAnagrams(String[] strs) {

if(strsnull||strs.length0) return null;

HashMap<String,List> map = new HashMap<>();

//遍历所有字符串

for (String str : strs) {

char[] chars = str.toCharArray();

//对每一个字符串进行排序,乱序后再排序后的字符串肯定都是一样的,直接用这个作为Key存入map中

Arrays.sort(chars);

String key = new String(chars);

List list = null;

//取key对应的value

if(!map.containsKey(key)) {

list = new ArrayList<>();

}else {

list = map.get(key);

}

list.add(str);

map.put(key,list);

}

return new ArrayList<>(map.values());

}

}

Q10.3 搜索旋转数组

搜索旋转数组。给定一个排序后的数组,包含n个整数,但这个数组已被旋转过很多次了,次数不详。请编写代码找出数组中的某个元素,假设数组元素原先是按升序排列的。若有多个相同元素,返回索引值最小的一个。

示例1:

输入: arr = [15, 16, 19, 20, 25, 1, 3, 4, 5, 7, 10, 14], target = 5

输出: 8(元素5在该数组中的索引)

示例2:

输入:arr = [15, 16, 19, 20, 25, 1, 3, 4, 5, 7, 10, 14], target = 11

输出:-1 (没有找到)

提示:

arr 长度范围在[1, 1000000]之间

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/search-rotate-array-lcci

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {

public int search(int[] arr, int target) {

for (int i = 0; i < arr.length; i++) {

if (arr[i]==target){

return i;

}

}

return -1;

}

}

Q10.5 稀疏数组搜索

稀疏数组搜索。有个排好序的字符串数组,其中散布着一些空字符串,编写一种方法,找出给定字符串的位置。

示例1:

输入: words = [“at”, “”, “”, “”, “ball”, “”, “”, “car”, “”, “”,“dad”, “”, “”], s = “ta”

输出:-1

说明: 不存在返回-1。

示例2:

输入:words = [“at”, “”, “”, “”, “ball”, “”, “”, “car”, “”, “”,“dad”, “”, “”], s = “ball”

输出:4

提示:

words的长度在[1, 1000000]之间

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/sparse-array-search-lcci

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

在Java中判断字符串值是否相等用s1,equals(s1)。不要直接用==,被耗了好长时间mmp.

class Solution {

//直接法

// public int findString(String[] words, String s) {

// for(int i =0;i <words.length;i++){

// if(words[i].equals(s)){

// return i;

// }

// }

// return -1;

// }

//二分搜索法

public int findString(String[] words, String s) {

//直接二分搜索

int left = 0;

int right = words.length - 1;

//[left.right)

while(left <= right){

while(left < words.length && words[left].equals("")){

left++;

}

while(right >= 0 && words[right].equals("")){

right–;

}

int mid = left + (right - left) / 2;

while(mid < words.length && words[mid].equals("")){

mid++;

}

if(words[mid].equals(s)){

return mid;

}else if(words[mid].compareTo(s) > 0){

//收缩右边界,锁定左边界

right = mid - 1;

}else if(words[mid].compareTo(s) < 0){

//收缩左边界,锁定右边界

left = mid + 1;

}

}

return -1;

}

}

Q10.9 排序矩阵查找

给定M×N矩阵,每一行、每一列都按升序排列,请编写代码找出某元素。

示例:

现有矩阵 matrix 如下:

[

[1,   4,  7, 11, 15],

[2,   5,  8, 12, 19],

[3,   6,  9, 16, 22],

[10, 13, 14, 17, 24],

[18, 21, 23, 26, 30]

]

给定 target = 5,返回 true。

给定 target = 20,返回 false。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/sorted-matrix-search-lcci

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {

public boolean searchMatrix(int[][] matrix, int target) {

if (matrix == null || matrix.length == 0) {

return false;

}

int m = matrix.length, n = matrix[0].length, row = 0, col = n - 1;

while (row < m && col >= 0) {

if (matrix[row][col] < target) {

row++;

} else if(matrix[row][col] > target) {

col–;

} else {

return true;

}

}

return false;

}

}

Q10.10 数字流的秩

假设你正在读取一串整数。每隔一段时间,你希望能找出数字 x 的秩(小于或等于 x 的值的个数)。请实现数据结构和算法来支持这些操作,也就是说:

结语

看到这篇文章的人不知道有多少是和我一样的Android程序员。

35岁,这是我们这个行业普遍的失业高发阶段,这种情况下如果还不提升自己的技能,进阶发展,我想,很可能就是本行业的职业生涯的终点了。

我们要有危机意识,切莫等到一切都成定局时才开始追悔莫及。只要有规划的,有系统地学习,进阶提升自己并不难,给自己多充一点电,你才能走的更远。

千里之行始于足下。这是上小学时,那种一元钱一个的日记本上每一页下面都印刷有的一句话,当时只觉得这句话很短,后来渐渐长大才慢慢明白这句话的真正的含义。

有了学习的想法就赶快行动起来吧,不要被其他的事情牵绊住了前行的脚步。不要等到裁员时才开始担忧,不要等到面试前一晚才开始紧张,不要等到35岁甚至更晚才开始想起来要学习要进阶。

给大家一份系统的Android学习进阶资料,希望这份资料可以给大家提供帮助。

这篇文章的人不知道有多少是和我一样的Android程序员。

35岁,这是我们这个行业普遍的失业高发阶段,这种情况下如果还不提升自己的技能,进阶发展,我想,很可能就是本行业的职业生涯的终点了。

我们要有危机意识,切莫等到一切都成定局时才开始追悔莫及。只要有规划的,有系统地学习,进阶提升自己并不难,给自己多充一点电,你才能走的更远。

千里之行始于足下。这是上小学时,那种一元钱一个的日记本上每一页下面都印刷有的一句话,当时只觉得这句话很短,后来渐渐长大才慢慢明白这句话的真正的含义。

有了学习的想法就赶快行动起来吧,不要被其他的事情牵绊住了前行的脚步。不要等到裁员时才开始担忧,不要等到面试前一晚才开始紧张,不要等到35岁甚至更晚才开始想起来要学习要进阶。

给大家一份系统的Android学习进阶资料,希望这份资料可以给大家提供帮助。
[外链图片转存中…(img-XBJsdtV2-1643882641388)]

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值