力扣编程题01

1160. 拼写单词

给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。

假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。

注意:每次拼写时,chars 中的每个字母都只能用一次。

返回词汇表 words 中你掌握的所有单词的 长度之和。

 

示例 1:

输入:words = ["cat","bt","hat","tree"], chars = "atach"
输出:6
解释: 
可以形成字符串 "cat" 和 "hat",所以答案是 3 + 3 = 6。
示例 2:

输入:words = ["hello","world","leetcode"], chars = "welldonehoneyr"
输出:10
解释:
可以形成字符串 "hello" 和 "world",所以答案是 5 + 5 = 10。
 

提示:

1 <= words.length <= 1000
1 <= words[i].length, chars.length <= 100
所有字符串中都仅包含小写英文字母

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-words-that-can-be-formed-by-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

分析:

开始的时候做一个备份chars,我们遍历数组中每一个元素,当这个元素每一个字母在chars中检查到相应的单词,就删除这个单词,防止后面查找出错,然后继续查找,如果有一个元素找不到就退出去,继续下一个单词的查找,如果整个单词遍历完了都找到了,就加上他的长度。最后输出。

class Solution {
    public int countCharacters(String[] words, String chars) {
        String s = chars;//备份,后面会改变字符串
        int count = 0;//记录返回的数字
        boolean flag = false;//一个单词中一个字母没有通过,就结束这个单词,标记
        for (int i = 0;i

1287. 有序数组中出现次数超过25%的元素

给你一个非递减的 有序 整数数组,已知这个数组中恰好有一个整数,它的出现次数超过数组元素总数的 25%。

请你找到并返回这个整数

 

示例:

输入:arr = [1,2,2,6,6,6,6,7,10]
输出:6
 

提示:

1 <= arr.length <= 10^4
0 <= arr[i] <= 10^5

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/element-appearing-more-than-25-in-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

分析:

  这个题只需要判断有几个重复的数字,如果重复的数字大于1/4这个数组的长度的话,就返回这个重复的数字。1/4数组长度需要对1/4数组长度向上取整,如果小于1的取1,数组长度等于1,返回第一个元素即可。

class Solution {
    public int findSpecialInteger(int[] arr) {
          if (arr.length==1){
            return arr[0];//如果只有一个元素,返回第一个元素
        }
        int count = 1;//有几个相同的
        int n = (int)Math.ceil((double)arr.length/4)>1?(int)Math.ceil((double)arr.length/4):1;//返回1/4数组,如果小于1按1算
        for (int i = 0;in){
                    return arr[I];//返回这个数字
                }
            }
        }
         return 0;
    }
}

520. 检测大写字母

给定一个单词,你需要判断单词的大写使用是否正确。

我们定义,在以下情况时,单词的大写用法是正确的:

全部字母都是大写,比如"USA"。
单词中所有字母都不是大写,比如"leetcode"。
如果单词不只含有一个字母,只有首字母大写, 比如 "Google"。
否则,我们定义这个单词没有正确使用大写字母。

示例 1:

输入: "USA"
输出: True
示例 2:

输入: "FlaG"
输出: False
注意: 输入是由大写和小写拉丁字母组成的非空单词。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/detect-capital
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

分析:我们首先判断第一个字母是否为大写,如果是,有一个flag记录大写字母个数,遍历完了数组之后我们判断这个单词有几个大写字母,如果为1个或者全部是,那么返回true,否则返回false。如果第一个为小写后面只要有大写就返回false,如果循环退出返回true。

  

class Solution {
    public boolean detectCapitalUse(String word) {
        int flag = 1;//记录大写字母个数
        if (word.charAt(0)>='A'&&word.charAt(0)<='Z'){//如果首字母是大写
            for (int i = 1;i='A'&&word.charAt(i)<='Z'){
                    flag++;//每多一个大写,flag+1
                }
            }
            if (flag==word.length()||flag==1){
                return true;//如果全部为大写或者第一个为大写返回true
            }else {
                return false;
            }
        }else {
            for (int i = 1;i='a'&&word.charAt(i)<='z'){
                    continue;//如果后面有不是小写的 直接返回false
                }else {
                    return false;
                }
            }
                return  true;//全部小写,返回true
        }
    }
}

 

189. 旋转数组

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。

示例 1:

输入: [1,2,3,4,5,6,7] 和 k = 3
输出: [5,6,7,1,2,3,4]
解释:
向右旋转 1 步: [7,1,2,3,4,5,6]
向右旋转 2 步: [6,7,1,2,3,4,5]
向右旋转 3 步: [5,6,7,1,2,3,4]
示例 2:

输入: [-1,-100,3,99] 和 k = 2
输出: [3,99,-1,-100]
解释: 
向右旋转 1 步: [99,-1,-100,3]
向右旋转 2 步: [3,99,-1,-100]
说明:

尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。
要求使用空间复杂度为 O(1) 的 原地 算法。


来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rotate-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

分析:

  我们首先取余,后面翻转的时候我们将翻转的右半部分放入一个新数组的前面,将翻转的左半部分放入新数组的右边即可。

class Solution {
    public void rotate(int[] nums, int k) {
        int []num = new int[nums.length];//将翻转后的放入
        int m = k%num.length;//如果次数大于数组长度避免错误
        for (int i = nums.length-m,j=0;i

 

你可能感兴趣的:(力扣编程题01)