颜色分类
思路
:
对数组进行两次遍历,在第一次遍历中将数组中所有的0交换到数组的前面;第二次遍历时,将所有的1放置在0的后面位置;此时,尾部剩余元素就是2了,也就完成了排序;
代码实现:
class Solution {
//交换方法
public void swap(int[] nums,int left,int right){
int temp=nums[left];
nums[left]=nums[right];
nums[right]=temp;
}
public void sortColors(int[] nums) {
int ptr=0;
//对数组进行遍历
for(int i=0;i<nums.length;i++){
if(nums[i]==0){
//交换
swap(nums,i,ptr);
++ptr;
}
}
for(int i=ptr;i<nums.length;i++){
if(nums[i]==1){
swap(nums,i,ptr);
ptr++;
}
}
}
}
只出现一次的字符
- 利用
Map(HashMap)
统计每个字符出现的次数; - 遍历将出现一次的字符进行返回;
代码实现:
class Solution {
public int firstUniqChar(String s) {
Map<Character,Integer> m=new HashMap<>();
//统计每个字符出现的次数
for(int i=0;i<s.length();i++){
char ch=s.charAt(i); //获取每个字符
m.put(ch,m.getOrDefault(ch,0)+1);
}
//遍历字符串,找出现一次的字符
for(int i=0;i<s.length();i++){
if(m.get(s.charAt(i))==1){
return i;
}
}
return -1;
}
}